【发布时间】: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