[oracle]进入 SQLPlus 从 Shell 脚本的多个行变量。

标签: shell UNIX Oracle
发布时间: 2014/3/9 7:31:16
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

将多个值从一个变量传递到 oracle 数据库中的单独记录的最佳方法是什么?

我想要的输出:

hddlist=`iostat -Dl|awk '{print ""$1"="$(NF)}'

这将返回这样的输出:

hdisk36=0.8
hdisk37=0.8
hdisk38=0.8
hdisk40=5.5   
hdisk52=4.9

我想要将它们插入到数据库就像这样:

sqlplus -s /nolog <<EOF1
connect / as sysdba
set verify off
insert into my_table ##Single Record Here
EOF1

如何有系统地分离出值因此,我可以创建单个记录,看起来像这样:

 Disk         Value
---------    -------
hdisk36       0.8
hdisk37       0.8
hdisk38       0.8
hdisk40       5.5   
hdisk52       4.9

最初尝试了一段时间循环与一个计数器,但似乎可以不让它开始工作。确切的解决办法是不错,但一些方向性的建议会只是作为有帮助。

解决方法 1:

循环并生成 insert 语句。

sql=$(iostat -Dl | awk '{print ""$1"="$(NF)}' | while IFS== read -r k v ; do
    printf 'insert into mytable (k, v) values (%s, %s);\n' "$k" "$v"
done)

可以将此输出传递以某种方式向 sqlplus ,或许是这样

sqlplus -s /nolog <<EOF1
connect / as sysdba
set verify off
$sql
EOF1

虽然取决于行格式的 iostat ,它可能会更简单,只是省略 awk 和解析与 read 直接。

官方微信
官方QQ群
31647020