【问题标题】:Bash Oracle connection execute multiple queriesBash Oracle 连接执行多个查询
【发布时间】:2021-02-09 00:19:47
【问题描述】:

我是使用 bash 编程 oracle 的新手,我必须创建一个函数来读取 CSV 并更新 Oracle DB 中的表,该函数目前正在运行。 我已经使用了这里的教程:https://zwbetz.com/connect-to-an-oracle-database-and-run-a-query-from-a-bash-script/

代码是:

export ORACLE_SID=$OSID
export ORACLE_HOST=$HOST
export ORACLE_PORT=$PORT
export ORACLE_DATABASE=$DB
export ORACLE_USERNAME=$USER 
export ORACLE_PASSWORD=$PW

while IFS="|" read -r col1, col2, col3; do
    sql="INSERT INTO my_table(col1, col2, col3)
                VALUES ('$col1',
                        '$col2', 
                        '$col3');"
    echo -e "SET PAGESIZE 0\n SET FEEDBACK ON\n $sql" | \
    sqlplus -S -L "$ORACLE_USERNAME/$ORACLE_PASSWORD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$ORACLE_HOST)(PORT=$ORACLE_PORT))(CONNECT_DATA=(SERVICE_NAME=$ORACLE_DATABASE)))"
    
done < $INPUT_ADD

使用这个突击队发送查询:

echo -e "SET PAGESIZE 0\n SET FEEDBACK ON\n $sql" | \
    sqlplus -S -L "$ORACLE_USERNAME/$ORACLE_PASSWORD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$ORACLE_HOST)(PORT=$ORACLE_PORT))(CONNECT_DATA=(SERVICE_NAME=$ORACLE_DATABASE)))"

我不确定的是,sqlplus 是否总是为每次执行查询打开一个新的数据库连接?如果是这样,是否可以在 while 循环完成时保持连接打开并关闭连接?

感谢您的帮助!

【问题讨论】:

    标签: bash oracle scripting sqlplus


    【解决方案1】:

    您可以在 while 循环中生成包含所有插入的 sql 文件,最后,在循环外,使用该文件作为输入调用 sqlplus。现在您只需连接一次。

    更单行的 *nix 方法是:

    awk '{transform-magic}' file.csv | sqlplus <connect-info>
    

    但我更愿意推荐现有的工具来完成这项工作。

    祝你好运!

    【讨论】:

    • 另外,将用户名/密码和其他连接信息放在环境变量中是非常不好的做法。如果您使用的是 sqlplus,那么您应该能够使用 Oracle Wallet 来保护这些凭据和其他连接详细信息。见这里:oracle-base.com/articles/10g/…
    【解决方案2】:

    非常感谢您提供创建包含查询的文件的提示。 最后,我可以使用 HERE 命令执行以下操作:

    sqlplus -L "$ORACLE_USERNAME/$ORACLE_PASSWORD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$ORACLE_HOST)(PORT=$ORACLE_PORT))(CONNECT_DATA=(SERVICE_NAME=$ORACLE_DATABASE)))" << HERE
    start tmp_query.sql
    quit
    HERE
    

    【讨论】:

      猜你喜欢
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多