bash - 在 bash unix 中使用 sqlplus 的动态数组循环
问题描述
我有一个包含几列的表,我想提取已排序的两列 RCRD_ID 和 ACCOUNT
RCRD_ID -----> 帐户
630566DAD135E9A11 -----> JZZ35
630566DAD135E9A12 -----> EGC46
630566DAD135E9A13 -----> 85955
630566DAD135E9A14 -----> EGC36
630566DAD135E9A15 -----> 85044
630566DAD135E9A16 -----> JZZ53
630566DAD135E9A17 - ----> 09686
630566DAD135E9A18 -----> 85044
630566DAD135E9A19 -----> JZZ53
630566DAD135E9A110 -----> 09686
630566DAD135E9A111 -----> 09686
我想将此数据存储在bash中的数组中
declare -a my_array =`sqlplus -s "$SqlString"<<eof
set trimout on feedback off verify off heading off echo off;
SELECT RCRD_ID FROM ACCNT_DTLS WHERE EVNT_ID='$Event' ORDER BY LPAD(RCRD_ID, (SELECT MAX(LENGTH(RCRD_ID)) FROM ACCNT_DTLS)) ASC;
EXIT;
eof`
注意:上面的 RCRD_ID 数据是这个查询的输出
SELECT RCRD_ID FROM ACCNT_DTLS WHERE EVNT_ID='$Event' ORDER BY LPAD(RCRD_ID, (SELECT MAX(LENGTH(RCRD_ID)) FROM ACCNT_DTLS)) ASC;
但是当我打印它的长度时my_array
它总是返回 1
结果,我想以 XML 格式打印上述数据
#loop start
echo "<RCRD_ID>$RCRD_ID</RCRD_ID>"
echo "<ACCOUNT>$ACCOUNT</ACCOUNT>"
#loop end
例子 -
<RCRD_ID>630566DAD135E9A11</RCRD_ID>
<ACCOUNT>JZZ35</ACCOUNT>
我试图创建一个数组并尝试传递 RCRD_ID 以在 SQL 查询中从 ACCNT_DTLS 获取 ACCOUNT
请帮助我动态循环它并创建一个 bash 脚本以从数据库中获取数据并打印所有 11 行以生成 XML
解决方案
关键是array=($(command))。
我写了一个例子。我希望这可以帮助你。
xml_str=''
first_column=true
res=($(sqlplus -s "$SqlString"<<eof
set trimout on feedback off verify off heading off echo off;
SELECT RCRD_ID FROM ACCNT_DTLS WHERE EVNT_ID='$Event' ORDER BY LPAD(RCRD_ID, (SELECT MAX(LENGTH(RCRD_ID)) FROM ACCNT_DTLS)) ASC;
EXIT;
eof))
for item in ${res[@]};do
if ${first_column};then
xml_str+="<RCRD_ID>$item</RCRD_ID>\n"
first_column=false
else
xml_str+="<ACCOUNT>$item</ACCOUNT>\n"
first_column=true
fi
done
echo -e ${xml_str}
推荐阅读
- android - Android总是在后台停止音频流
- angular - 如何将 primeNg 下拉选择值设置为对象的 id 而不是整个对象
- mysql - 货量有限、人流量大的订舱数据库MySQL查询设计
- c++ - 推导将被称为重载构造函数的类型
- forms - 使用参数提交表单以执行操作,Asp.Net.Core Mvc
- javascript - 为什么 cookieParser 不返回值?
- java - 转义正则表达式变量
- python - 加载 TensorFlow 嵌入模型
- mysql - 如何在 mysql 中保存和检索图像?
- python - 如何使用 BeautifulSoup 在包含多个表的页面上选择一个表