微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash Oracle 连接执行多个查询

如何解决Bash Oracle 连接执行多个查询

我是在 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,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 循环完成时保持连接打开并关闭连接?

感谢您的帮助!

解决方法

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

更单行的 *nix 方法是:

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

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

祝你好运!

,

非常感谢您提示创建包含查询的文件。 最后,我可以使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。