首页 > 解决方案 > 在 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

标签: bashunix

解决方案


关键是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}

推荐阅读