如何从oracle select query获取多个列值到shell变量

问题描述 投票:0回答:1

我试图获取具有多个列值的行到不同的shell变量。事实上我发现,所有列值都可以存储到单个shell变量中。但是,如何将这些列值分隔为单独的shell变量。以下是我暂时尝试的一个例子

function sqlQuery {
sqlplus -S shiyas/********* <<'EOF'
set heading OFF termout ON trimout ON feedback OFF
set pagesize 0
SELECT name,open_mode from v$database;
EOF
}
OUTPUT="$( sqlQuery )"
echo $OUTPUT

在这里,我得到的输出为

ORCL READ WRITE

但我的要求是列值ORCL,READ WRITE应该分配给不同的shell变量。

我尝试了下面的解析。

echo "$OUTPUT" | while read name open_mode

但它抛出意外的文件错误结束。

-bash-3.2$ sh call_sql_col_val_1.sh
ORCL READ WRITE
call_sql_col_val_1.sh: line 18: syntax error: unexpected end of file

请让我知道我可以使用什么概念将单行列值提取到不同的shell变量。

shell oracle11g multiple-columns
1个回答
0
投票

我自己通过eval这样做:

oracle@******:/*****> cat test.sh
#!/bin/bash
function sqlQuery {
sqlplus -S / as sysdba <<'EOF'
set heading OFF termout ON trimout ON feedback OFF
set pagesize 0
SELECT name,open_mode from v$database;
EOF
}
eval x=(`sqlQuery`)
NAME=${x[0]}
OPEN_MODE="${x[1]} ${x[2]}"
echo NAME IS $NAME
echo OPEN_MODE IS $OPEN_MODE

因此,我们运行与上面相同的功能,将其传递到x并通过eval运行它来处理分隔。然后你有一个数组,并且调用调用是这样的:例如,第一项的x[0]。 输出是:

oracle@******:/******> sh test.sh
NAME IS ******
OPEN_MODE IS READ WRITE
© www.soinside.com 2019 - 2024. All rights reserved.