将查询从 bash 发送到 sqlplus

Posted

技术标签:

【中文标题】将查询从 bash 发送到 sqlplus【英文标题】:Send query from bash to sqlplus 【发布时间】:2017-02-21 10:53:49 【问题描述】:

我有一个 bash 脚本,它必须连接到 sqlplus 并执行查询或过程

我该怎么做?

这不起作用..

  function log_to_sqlplus() 
    if [ "$1" != "" ] && [ "$2" != "" ];
    then
        sqlplus '$1/$2' <<EOF 
        BEGIN
              DBTEST.SP_RUN();
         END; /
EOF
    fi
    

【问题讨论】:

“不起作用”是什么意思 - 会发生什么?这正是您要运行的内容,还是您更改了发布格式? @AlexPoole 现在请检查 【参考方案1】:

您不应该将凭据括在单引号中,即使参数显示正确,这也会阻止登录成功。 (我建议您可能还想使用 -s 和 -l 标志)。

您还需要将斜杠 (/) 单独放在一行上,它通常显示在行首,尽管在这里似乎无关紧要:

function log_to_sqlplus() 
    if [ "$1" != "" ] && [ "$2" != "" ];
    then
        sqlplus -s -l $1/$2 <<EOF 
        BEGIN
            DBTEST.SP_RUN();
        END;
        /
EOF
    fi

已测试运行我有权访问的程序:

#!/bin/bash

function log_to_sqlplus() 
    if [ "$1" != "" ] && [ "$2" != "" ];
    then
        sqlplus -l -s $1/$2 <<EOF
        BEGIN
            -- DBTEST.SP_RUN();
            dbms_stats.gather_schema_stats(user);
        END;
        /
EOF
    fi


log_to_sqlplus my_username my_password

得到输出:

PL/SQL procedure successfully completed.

【讨论】:

以上是关于将查询从 bash 发送到 sqlplus的主要内容,如果未能解决你的问题,请参考以下文章

Bash:将数据文件逐行发送到C程序中

如何将括号发送到以括号为界的管道中?

将 ssh 登录发送到 Mattermost 的 bash 脚本的问题 [重复]

有没有办法确定sqlplus缓冲区是不是已经发送到服务器?

使用 Pyspark 将 SQL 查询从 DataBricks 发送到 SQL Server [重复]

text 将bash命令输出发送到void