簡體   English   中英

如何在bash腳本中將變量傳遞給sqlplus

[英]How to pass a variable to sqlplus in a bash script

我有一個如下的腳本。 我的目標是寫入一個以當前日期和時間作為文件名結尾的日志文件,並假脫機到該文件:

#!/bin/bash

year=`date +%Y`
month=`date +%m`
day=`date +%d`
prefixe=$month$day$year
logfile="/home/oracle/logs/exec_proc_daily_20_"$prefixe.log

sqlplus / "as sysdba" <<EOF
spool on
spool $logfile
execute Proc_RFC_MAJ_MV_ITIN;
execute Proc_RFC_MAJ_MV_REFGEO;
commit;
quit
EOF

當我執行腳本時, spool $logfile給出錯誤。 沒有日志創建。 但是當我使用spool exec_proc_daily_2o.log類的東西時,它可以工作。 為什么變量$logfile不被替換。

經過大量挖掘之后,我找到了解決問題的方法。 sqlplus / "as sysdba" <<EOF ,我傳遞了像sqlplus / as sysdba <<EOF >$logfile這樣的變量。 因此完整的代碼應為:

#!/bin/bash

year=`date +%Y`
month=`date +%m`
day=`date +%d`
prefixe=$month$day$year
logfile="/home/oracle/logs/exec_proc_daily_20_"$prefixe.log

sqlplus / "as sysdba" <<EOF >$logfile
spool on
spool $logfile
execute Proc_RFC_MAJ_MV_ITIN;
execute Proc_RFC_MAJ_MV_REFGEO;
commit;
quit
EOF

[使用工作示例進行編輯]將變量傳遞給sqlplus:

演示

export myvar1="hello"
export myvar2=123
sqlplus "/ as sysdba" @demo.sql $myvar1 $myvar2
echo "---shell is complete---"

演示程序

select 'first variable is &1 and second is &2'
from dual;
exit

@Beege答案在Linux環境中有效。 我所做的更改很少,因為我不想在所有地方都在SQL腳本中引用&1和&2。

myvar1="hello"
myvar2=123
sqlplus username/password@SID @oracle_variabling_passing.sql $myvar1 $myvar2
echo "---shell is complete---"

oracle_variabling_passing.sql:

define first_var=&1
define second_var=&2
select 'first variable is &&first_var and second is &&second_var'
from dual;
exit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM