【问题标题】:Needs to pass variable values to sqlplus sql file from shell script需要从 shell 脚本将变量值传递给 sqlplus sql 文件
【发布时间】:2020-12-06 17:25:44
【问题描述】:

我正在使用属性文件来获取数据库连接值,下面是 shell 脚本文件。

....
read -p "Please enter start date and end date " para1 para2
source database.prop
for ((i=1;i<=$Dbcount;i++ )); do
sqlplus -S ${user1}/${Password}@${conn} <<EOF &
spool sqlcsvdb_"$i".csv
@squery.sql $para1 $para2
exit;
EOF
done
....

squery.sql 文件。

....
SET PAGESIZE 50000
SET COLSEP "|"
SET LINESIZE 20000
SET headsep ON
SET FEEDBACK OFF
SET TRIMSPOOL ON
SET TRIMOUT ON
set verify off 
SELECT id|| '|'||date|| '|'|| appid from table where date between '&para1' and '&para2';
exit;
EOF
....

当我执行 shell 时,它没有传递变量值并在第 1 行得到 ERROR:ORA-01722: invalid number 错误消息。 请帮助我解决这个问题以及绑定变量的使用。

【问题讨论】:

  • $para1 和 $para2 设置在哪里,您在 SQL*Plus 调用之前检查它们是否正确?如果它们代表日期,它们是什么格式的? (您可能应该在通话中引用它们,如@$para1",但不太可能是问题所在。)当您更改发布的 SQL 时,您确定您的真实版本在替换变量周围有单引号 -那些应该在to_date() 调用中,除非参数格式允许您使用日期文字?
  • 实际上你也没有定义&amp;para1,你的真实脚本中真的有&amp;1吗?很难从中看出你真正在做什么。不过,设置验证可能会更清楚地说明出了什么问题。如果没有,那么你需要举一个更现实的例子。只要您始终如一地合法地更改名称和数据就可以了...
  • 看起来像许多其他关于将 CMD 参数传递到 SQLPlus 的问题的重复。喜欢stackoverflow.com/questions/18620893/…stackoverflow.com/questions/40989668/…
  • @Dornaut,我检查了上面的链接,但我使用的是相同的方式,但我仍然收到绑定变量未定义的错误消息。
  • @AlexPoole,日期参数动态传递,日期验证与数据库日期格式相同,在我的脚本中工作正常,阅读 -p "请输入开始日期和结束日期" para1 para2,通过日期参数与 DB 日期格式相同。

标签: oracle shell unix oracle-sqldeveloper sqlplus


【解决方案1】:
....
read -p "Please enter start date and end date " para1 para2
Date1=$para1
Date2=$para2
source database.prop
for ((i=1;i<=$Dbcount;i++ )); do
sqlplus -S ${user1}/${Password}@${conn} <<EOF &
spool sqlcsvdb_"$i".csv
@squery.sql $Date1 $Date2
exit;
EOF
done
....
....
SET PAGESIZE 50000
SET COLSEP "|"
SET LINESIZE 20000
SET headsep ON
SET FEEDBACK OFF
SET TRIMSPOOL ON
SET TRIMOUT ON
set verify off 
SELECT id|| '|'||date|| '|'|| appid from table where date between '&1' and '&';
exit;
EOF
....

在 shell 脚本文件中再次定义变量,然后将这些变量传递给 sql 文件有效,直到在 shell 脚本中定义了变量,它不起作用。

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2015-09-09
    • 2020-06-02
    • 1970-01-01
    相关资源
    最近更新 更多