【问题标题】:How to have variable in sql script?如何在sql脚本中有变量?
【发布时间】:2014-12-11 22:00:59
【问题描述】:

数据库:Oracle 11gR2

操作系统:Linux

客户端:sqlplus

在 ksh 脚本中,我们可以有类似下面的内容

DOW=`date +%a`
LOG= /home/output/$DOW

是否可以在 SQL 脚本中使用这样的 $DOW 变量?

基本上我正在运行 sql 脚本并将日志假脱机到一个位置,但是通过上述更改,我想在它运行的任何一天将日志位置更改为 DOW(Day Of Week) 目录。

e.g. spool /home/output/$DOW/test.log

On tuesday script creates log under Tue directory /home/output/Tue/test.log

【问题讨论】:

  • @a_horse_with_no_name 添加了详细信息.. 谢谢。
  • 如果您在操作系统脚本中使用<< EOF 结构,一切皆有可能。至少,在 Bash 上,我只是假设 Ksh 也允许这样做。因此,您只需编写一个也运行 SQL 命令的操作系统脚本。当你这样做时,你可以使用任何你想要的操作系统变量。否则,您需要将操作系统变量作为参数传递给 SQLPLUS 文件,例如:mysqlfile.sql $DOW $LOG $PATH

标签: sql oracle11g sqlplus


【解决方案1】:
echo "I am a shell script"
sqlplus user/pass@something << EOF
spool /home/output/$DOW/test.log
select 9 from dual;
spool off
exit
EOF
  • sqlplus 连接可能是你喜欢的方式; sqlplus usersqlplus / as sysdba 或 ..
  • 最后一个 EOF 应放在屏幕左边框
  • 我假设这适用于 Bash 和 Korn shell
  • 它可以在不使用EXIT 的情况下工作
  • SPOOL OFF 相同

【讨论】:

  • ,感谢您的 cmets。我想我没有正确解释或者我没有理解你的评论。我只有一个 sql 文件,它没有被任何 ksh 或 bash 脚本执行。我当然可以创建另一个 ksh 脚本并从那里调用 sql 并解决我的问题。我的问题是 1. 在 .sql 文件中是否可以创建 $DOW 变量并在正确的日期目录中生成日志(例如周一、周二..)
  • 嗯,好的。所以你只在 SQL 文件中工作。在这种情况下,在 Linux/Unix 上,您可以使用 !host 命令来运行操作系统命令。示例:SQL&gt; host echo $PATHSQL&gt; ! echo $PATH --- 或者,更完整:SQL&gt; ! echo define PATH=$PATH &gt; temp.sql 然后运行 ​​start temp.sql,然后定义变量 PATH:select '&amp;PATH' from dual; 将显示:旧 1:从双重新 1 中选择“&PATH”:选择'/usr/lib64/qt-3.3/bi ..
  • 好主意!或主机命令,我将对其进行测试并更新它。谢谢。
  • 抱歉没有回复测试结果,还记得我上面的评论,会回复的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多