Shell 與 sqlplus 交互 的幾種狀況彙總

1、最簡單的shell裏調用sqlplus. sql

$ vi test1.sh
#!/bin/bash
sqlplus -S /nolog > result.log <<EOF
set heading off feedback off pagesize 0 verify off echo off
conn scotter/tigger
select sysdate from dual;
exit
EOF
$ chmod +x test1.sh
$ ./test1.sh

2、把sqlplus執行結果傳遞給shell方法一
注意sqlplus段使用老闆鍵`了, 賦變量的等號兩側不能有空格. shell

$ vi test2.sh

#!/bin/bash

 #不須要> result.log或者>/dev/null
VALUE=`sqlplus -S /nolog <<EOF  
set heading off feedback off pagesize 0 verify off echo off numwidth 4
conn scotter/tigger
select count(*) from tab;
exit
EOF`
if [ "$VALUE" -gt 0 ]; then
        echo "The number of rows is $VALUE."
        exit 0
else
        echo "There is no row in the table."
fi

$ chmod +x test2.sh
$ ./test2.sh

3、把sqlplus執行結果傳遞給shell方法二
注意sqlplus段使用 col .. new_value .. 定義了變量並帶參數exit, 而後自動賦給了shell的$?,這種狀況使用比較狹窄,是對返回數字的狀況專用,若是返回字符串,不是數字,退出碼的方法就無能爲力了。 而方法一是無論什麼狀況通吃的。
安全

$ vi test3.sh 
#!/bin/bash 
#用退出碼返回值,須要重定向‘> result.log’,不然會顯示到屏幕上。 
sqlplus -S /nolog > result.log <<EOF      
set heading off feedback off pagesize 0 verify off echo off numwidth 4 
conn scotter/tigger 
col   coun   new_value   v_coun 
select count(*) coun from tab; 
exit v_coun 
EOF 
VALUE="$?" 
echo "The number of rows is $VALUE." 
$ chmod +x test3.sh 
$ ./test3.sh


4、把shell程序參數傳遞給sqlplus
$1表示第一個參數, sqlplus裏能夠直接使用, 賦變量的等號兩側不能有空格不能有空格. bash

$ vi test4.sh 
#!/bin/bash 
NAME="$1" 
sqlplus -S scotter/tigger <<EOF 
select * from tab where tname = upper('$NAME'); 
exit 
EOF 
$ chmod +x test4.sh 
$ ./test4.sh ttt


5、爲了安全要求每次執行shell都手工輸入密碼 code

$ vi test5.sh 
#!/bin/bash 
echo -n "Enter password for u_test:" 
read PASSWD 
sqlplus -S /nolog <<EOF 
conn scotter/$PASSWD 
select * from tab; 
exit 
EOF 
$ chmod +x test5.sh 
$ ./test5.sh


6、爲了安全從文件讀取密碼
對密碼文件設置權限, 只有用戶本身才能讀寫. 字符串

$ vi test6.sh 
#!/bin/bash 
PASSWD=`cat u_test.txt` 
sqlplus -S /nolog <<EOF 
conn scotrer/$PASSWD 
select * from tab; 
exit 
EOF 
$ chmod +x test6.sh 
$ ./test6.sh


七 、sqlplus的結果存儲在文件中 it

#!/bin/sh 
sqlplus -S "scotter/tigger"<<EOF 
set heading off 
set feedback off 
set pagesize 0 
set verify off 
set echo off 
spool spool_file 
SELECT * from teacher; 
spool off 
exit; 
EOF

與下列代碼效果是相同的: table

#!/bin/sh 
sqlplus -S "scotter/tigger"<<EOF > spool_file 
set heading off 
set feedback off 
set pagesize 0 
set verify off 
set echo off 
SELECT * from teacher; 
exit; 
EOF
--End--
相關文章
相關標籤/搜索