首页 > 解决方案 > mapfile 无法将 sql 输出转换为数组变量

问题描述

我正在尝试从 oracle 表中获取 ID 列表并将其存储为数组变量。尝试使用 mapfile 填充变量效果不佳。从查询返回的 10 行被视为单行。参数-t没有帮助。

我的计划是将此数组变量用于另一个数组(.txt 文件将作为其源)来交叉验证值的存在。

#!/bin/sh

temp_id_list=`sqlplus -silent ${o_schema_name}/${o_schema_pwd}@$o_db_name <<EOF 
whenever sqlerror exit sql.sqlcode
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF 
SELECT DISTINCT memid FROM members WHERE ROWNUM < 11;
EXIT;
EOF`

mapfile -t id_list <<< ${temp_id_list}
echo "encoding details for a file : ${id_list[@]}"
echo "Number of elements in id_list: ${#id_list[@]}"    

上面的输出是

values in array: 220000068 220000163 220000188 220000232 220000239 220000261 220000815 220000909 220000914 220001074
Number of elements array: 1

总而言之,从|分隔文本文件中动态选择的一列需要与 Oracle 表中可用的等效源进行交叉验证。表和平面文件都可能有大量的行。因此,试图获得一个强大的解决方案。

提前致谢。

更新:将变量添加到双引号后它正在工作 mapfile -t id_list <<< "${temp_id_list}"

标签: arraysshellcompare

解决方案


推荐阅读