如何在bash脚本中执行Docker sqlplus查询?

guykilcj  于 2023-01-12  发布在  Docker
关注(0)|答案(1)|浏览(151)

在Ubuntu 21.04上,我安装了docker的oracle dtb,运行良好,我正在为sql开发人员使用它,但现在我需要在shell脚本中使用它。我不确定它是否可以这样工作,或者它是一些更好的方式。我正在尝试运行简单的脚本:

#!/bin/bash
SSN_NUMBER="${HOME}/bin/TESTS/sql_log.txt"
select_ssn () {
        sudo docker exec -it oracle bash -c "source /home/oracle/.bashrc; sqlplus username/password@ORCLCDB;" <<EOF > $SSN_NUMBER
        select SSN from employee
        where fname = 'James';
        quit
EOF
}

select_ssn

运行此命令后,没有任何React,我需要终止会话。或
输入设备不是TTY
显示

l3zydbqr

l3zydbqr1#

从Docker外部指定here文档会有问题。请尝试将查询命令内联到Bash命令行中。记住bash -c的字符串参数可以是任意复杂的。

docker exec -it oracle bash -c "
    source /home/oracle/.bashrc
    printf '%s\n' \\
        \"select SSN from employee\" \\
        \"where fname = \'James\'\;\" |
    sqlplus -s username/password@ORCLCDB" > "$SSN_NUMBER"

我删除了sudo,但也许您真的需要它。我在快速浏览手册页的基础上向sqlplus添加了-s选项。
这里的引号很复杂,我不确定是否需要额外的调整。我在shell脚本周围使用了双引号,这意味着引号内的一些内容在传递给容器之前将由调用shell处理。
在最坏的情况下,如果查询本身是静态的,那么在构建查询时将其存储在映像中的文件中将是最不令人惊讶的方法。

相关问题