【问题标题】:How to pass a variable to sqlplus in a bash script如何在 bash 脚本中将变量传递给 sqlplus
【发布时间】:2019-08-05 02:56:40
【问题描述】:

我有一个像下面这样的脚本。我的目标是写入以当前日期和时间作为文件名和假脱机文件终止的日志文件:

#!/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" 替换为cat 并运行您的脚本表明变量替换正在按预期工作...

标签: oracle bash sqlplus


【解决方案1】:

经过大量挖掘,我找到了问题的解决方案。在sqlplus / "as sysdba" &lt;&lt;EOF 行上,我传递了这样的变量sqlplus / as sysdba &lt;&lt;EOF &gt;$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 命令正在将 sqlplus 的输出重定向到 $logfile。
【解决方案2】:

[使用工作示例编辑] 将变量传递给 sqlplus:

demo.sh

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

demo.sql

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

【讨论】:

  • 嗨@Beege。感谢您的输入。我已经尝试过你的方法,但它不起作用。我收到错误使用 sqlplus 命令的消息以及如何使用它的建议。
  • 在 linux 环境中工作,我做了两个更改,因为我不想在我的 SQL 脚本中引用 $1 和 $2。 ```define myvar1='&1' define myvar2='&2' select '第一个变量是 &&myvar1,第二个是 &&myvar2' from dual;退出```
【解决方案3】:

@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

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2010-12-13
    相关资源
    最近更新 更多