在sql EOF中声明bash变量

时间:2016-05-15 01:49:14

标签: sql oracle bash plsql

如何在bash命令中声明变量。见"?"
我以为我们几乎可以运行任何bash语句!或者在行前面主持

#!/bin/bash

sqlplus scott/tiger@orcl << EOF

! export v10="Hi"                Doesn't work, why?
! echo $v10                      Doesn't work, why?  

! echo "Done"                 Works perfectly and also other bash commands

select * from dept;           Works perfectly
exit
EOF

谢谢

2 个答案:

答案 0 :(得分:2)

@jordanm说什么&#34;可能&#34;正是发生了什么。当您从sqlplus中指定主机命令时,会生成一个单独的shell进程,该进程执行该命令,然后该进程终止并且控制返回到sqlplus。在该子shell进程中设置的任何环境变量都只在其中,因此当它终止时,它们就会消失。

至于你的特定行&#34;工作&#34;和&#34;不工作&#34; ..&#34; export v10 =&#34;嗨&#34;确实有效,但没有标准显示出口&#39;命令,并且如上所述,一旦子进程完成并且控制返回到sqlplus,变量v10就不再存在。 &#34; echo $ v10&#34;也有效,但由于这是一个新的shell进程,它没有$ v10的值,所以没有什么可以回应。

你想通过在sqlplus中设置环境变量来实现什么目标?

答案 1 :(得分:0)

发现它,我所要做的只是

&LT;&LT; EOF
        每当sqlerror退出失败回滚         每当oserror退出失败回滚         @ scriptname.sql         出口 EOF