標籤:blog http ar 使用 sp on 檔案 log bs
sqlplus與shell互相傳值的幾種情況
情況一:在shell中最簡單的調用sqlplus
$cat test.sh
#!/bin/sh
sqlplus oracle/[email protected]>file.log <<EOF
select * from test;
exit
EOF #注意EOF要頂格寫
$sh test.sh
$cat file.log
--省略若干系統提示資訊-------
SQL>
EMPNO EMPNAME SAL DEPTNO
----- ------------- ----- ------
10002 Frank Naude 500 20
10001 Scott Tiger 1000 40
--省略若干系統提示資訊-------
將執行過程重新導向入檔案file.log,可通過cat file.log查看
情況二:直接將sqlplus的值賦值給shell變數
$cat test.sh
#!/bin/sh
# 將sqlplus的結果輸出給變數VALUE
# set命令的使用可查詢手冊
#注意shell中等號兩邊不能有空格
VALUE=`sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off
conn oracle/[email protected]
select count(*) from test;
exit
EOF`
#輸出記錄數
echo "The number of rows is $VALUE."
$sh test.sh
The number of rows is 2.
顯示結果正確,表test共2條記錄
情況三:間接將sqlplus的值賦值給shell變數
$cat test.sh
#!/bin/sh
#利用COL column NEW_VALUE variable定義變數
#sqlplus執行完後最後傳回值為v_coun
#利用$?將最後傳回值賦值給VALUE,也即為test的記錄數
sqlplus -S /nolog <<EOF
set heading off feedback off pagesize 0 verify off echo off
conn oracle/[email protected]
col coun new_value v_coun
select count(*) coun from test;
exit v_coun
EOF
VALUE="$?"
echo "The number of rows is $VALUE."
$sh test.sh
2
The number of rows is 2.
指令碼執行結果中第一個2為sqlplus傳回值,第二個2為VALUE的值
情況四:將shell變數的值傳給sqlplus使用
$cat test.sh
#!/bin/sh
#sqlplus引用shell變數TABLENAME的值
#注意賦值時,等號兩邊不能有空格
TABLENAME="test"
sqlplus -S oracle/[email protected] <<EOF
select * from ${TABLENAME};
exit
$sh test.sh
EMPNO EMPNAME SAL DEPTNO
----- -------------------------------------------------- ---------- ------
10002 Frank Naude 500 20
10001 Scott Tiger 1000 40
指令碼執行結果為:select * from test;的結果
情況五:通過互動方式手工輸入shell變數值
$cat test.sh
#!/bin/sh
#將手工輸入變數值讀入變數TABLENAME
echo "Enter the tablename you want to select:"
read TABLENAME
sqlplus -S oracle/[email protected] <<EOF
select * from ${TABLENAME};
exit
$sh test.sh
#按提示輸入表名test
Enter the tablename you want to select:
test
EMPNO EMPNAME SAL DEPTNO
----- -------------------------------------------------- ---------- ------
10002 Frank Naude 500 20
10001 Scott Tiger 1000 40
指令碼執行結果為select * from test的執行結果
本文出自 “To_Be_Monster_Of_IT” 部落格,請務必保留此出處http://nbmonster.blog.51cto.com/1977736/665767
轉:sqlplus與shell互相傳值的幾種情況