sql - 在 sql EOF 中声明 bash 变量

标签 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

谢谢

最佳答案

@jordanm 所说的“可能”正是正在发生的事情。当您从 sqlplus 中指定主机命令时,会生成一个单独的 shell 进程,该进程执行该命令,然后该进程终止,控制权返回到 sqlplus。在该子 shell 进程中设置的任何环境变量仅在其内部有效,因此当它终止时,它们就会消失。

至于“工作”和“不起作用”的特定行..“export v10 =“Hi”确实有效,但没有“export”命令的标准输出显示,正如所解释的那样,该变量 v10一旦子进程完成并且控制权返回到 sqlplus,它就不再存在。“echo $v10”也可以工作,但由于这是一个新的 shell 进程,它对 $v10 没有任何值,因此没有任何内容可以回显。

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

关于sql - 在 sql EOF 中声明 bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37233709/

相关文章:

mysql - 如何对每组结果进行group by/group_concat?

php - MySQL char 接受不固定的值

SQL查询以检查该月的最后一天不是星期日

sql - Oracle 如何将生成的列添加到选择 *

linux - 在 Linux 中导航目录的更快方法?

sql - pgSQL FULL OUTER JOIN 'WHERE' 条件

sql - Oracle APEX 4.2 经典报告中的自定义搜索

linux - cat 单行显示多行文件内容

bash - 如何通过 https 并行运行多个 curl 命令

mysql - 如何从表中获取value1的最大值,其中value1和value2字段忽略value2字段