2013-01-03 65 views
2

我已經在文件(例如ENV=$1 RELEASE_ID=$2)中設置了my.sh文件中的變量。我sqlplus到像從bash shell傳遞變量到sql文件到oracle表

sqlplus -S $username/[email protected] @/path/copysetup/insert.sql 

我的SQL文件,我想變量ENV=$1RELEASE_ID=$2從UNIX提示符下調用從我的SQL文件傳進我的SQL文件

copysetup.sh env01 release 1.0 

我想相同的變量傳遞到一個oracle表

insert into table... 

有人可以幫助如何將變量從bash shell腳本傳遞到sql文件並最終插入進入我的oracle表嗎?

回答

5

傳遞參數的命令行:

sqlplus -S $username/[email protected] @/path/copysetup/insert.sql $ENV $RELEASE_ID 

然後在SQL腳本他們成爲& 1和& 2(確保你在SQL腳本的頂部有set scan on

set scan on 
insert into foo (env, release) values ('&1', '&2'); 
commit; 
+0

我試過了你的建議,&1和&2插入我的oracle表副ENVXX版本1.XX.它似乎沒有從我的.sh文件中獲取變量。我正在通過我的unix提示定義變量。所以我打電話給我的.sh文件就像這樣(例如copysetup.sh ENV01版本1.00)。我的希望是,當我指定我想要在UNIX中傳遞的時候,它會將這些變量從我的.sh文件傳遞到sql文件,並最終將它們插入到我的oracle表中。還有其他建議嗎? – user1813261

+0

@ user1813261如果你手動啓動sql plus並執行你的sql文件爲'@/path/copysetup/insert.sql test test'確實測試並測試得到插入或者&1&2仍然存在?如果&1在sqlplus中運行時仍然是show definition和show scan的輸出結果? – DazzaL

+0

我得到它的工作。謝謝你的幫助!!! :-) – user1813261

0

假設您的insert.sql文件是您想要插入環境變量(或任何bash變量)的文件,您可以使用sed來查找/替換一些佔位符文本,並將其替換爲所需的值。舉例來說,如果你的insert.sql文件看起來像

INSERT INTO @mytable VALUES (1,'sometext'); 

你可以使用SED發現使用以下語法在bash腳本/替換@mytable字符串與存儲在$MYVAR數據

sed "s/@mytable/$MYVAR" insert.sql > modifiedinsert.sql 

現在這會生成一個新文件,然後您將傳入sqlplus中的modifiedinsert.sql。