[英]How to pass a parameter from shell script to SQL script?
我有 2 個腳本 - 一個 shell 和一個 sql。
我的 shell 腳本與此類似:
export nbr=&1
runsql script_name.sql
我試圖在運行腳本時為 nbr 傳遞參數。
對應的 sql 腳本如下:
insert into table1
select * from table2
where year='&1'
我得到如下錯誤:
"enter value for year: old 22: where year='$1')
new 22: where year='commit')"
我將通過一個基於我自己的腳本的示例來展示如何輕松處理它。 在這個腳本中,我定義了一個簡單的 function run_sql(DESCR, SCRIPT, DATABASES)
,其中
然后我們可以像這樣輕松地使用它:
run_sql "1st script" "@sql1.sql param1" db1 db2
run_sql "2nd script" "@sql2.sql param1 param2 param3" db1 db2 db3
在這里我們執行:
我們將所有 output 保存到自己的日志文件中。
完整示例測試 output: https://gist.github.com/xtender/465fe1121befeed7fe0ae1a3
簡單腳本test.sh
:
#!/bin/bash
# Here you can define your db connection strings:
db1=xtender/pass@PDB19C_11
db2=xtender/pass@PDB19C_11
db3=xtender/pass@PDB19C_11
#####################################################################
# functions:
# Function syntax: run_sql(DESCR, SCRIPT, DATABASES)
# where
# DESCR - short description
# SCRIPT - sqlplus run arguments, ie script name and its parameters
# DATABASES - list of dbname defined above on which you want to run it
run_sql(){
local DESCR="$1"; shift
local SCRIPT="$1"; shift
local databases=("$@")
echo =================================================
echo = $DESCR
echo = Going to execute $SCRIPT...
read -a res -p "Enter 'skip' to skip this step or press Enter to execute: "
if [[ $res = "skip" ]]
then
echo Skipping $SCRIPT...
else
echo Executing $SCRIPT...
for db in "${databases[@]}"
do
local cur=${!db}
echo Executing $SCRIPT on $db - $cur...
sqlplus -L -S ${cur} $SCRIPT >>log-$db.log 2>&1
echo Done.
done
echo =================================================
fi
}
#####################################################################
# Here we execute a script "sql1.sql" with one argument "param1" on db1 and db2:
run_sql "1st script" "@sql1.sql param1" db1 db2
# Here we execute a script "sql2.sql" with 3 arguments on db1,db2 and db3:
run_sql "2nd script" "@sql2.sql param1 param2 param3" db1 db2 db3
echo ============================================
echo === Done
echo ============================================
Then we can create sql scripts, for example sql1.sql
and sql2.sql
: sql1.sql
requires one argument and sql2.sql
- 3 arguments:
sql1.sql:
select '&1' as output from dual;
exit;
sql2.sql:
select
'&1' out1,
'&2' out2,
'&3' out3
from dual;
exit;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.