我需要编写一个简单的 shell 函数,该函数从 Oracle DB 返回单个字段。举例来说SELECT 'ABC' FROM dual;
ABC就是我所追求的。
这是我的功能:
function getSomeOraVal
{
sqlplus $USER/$PASSWD@$ORADB<<!!
SET sqlprompt ''
SET sqlnumber off
SET verify off
SET pages 0
SET echo off
SET head on
SET feedback off
SET feed off
SET serveroutput on
SET escape '\'
VARIABLE v_someVal VARCHAR2(30);
BEGIN
SELECT 'ABC' INTO v_someVal FROM dual;
END;
/
SELECT :v_someVal FROM dual;
!!
}
但是,我想将 sqlplus 输出(仅数据 -> 'ABC')通过管道传输到 shell 变量中,然后该函数返回该变量并可以从其他 shell 脚本调用。不幸的是,sqlplus 返回大量垃圾,例如顶部的“Welcome to Oracle”和底部的“Disconnected...”。
如何从 SQL 结果集中提取数据,或者在本例中提取单个值并将其传递到 UNIX 变量以便在 shell 中进行进一步操作?
Thanks
这个askTom 线程中有几种不同的方法将值从 SQL*Plus 返回到 shell 脚本.
一种常见的方法是除了要返回的值(在 Tom 的示例中,即字符串“KEEP”)之外,还选择一个常量标记,然后使用 sed(或您最喜欢的命令行解析器)来提取您要返回的数据。实际上感兴趣
#!/bin/ksh
x=`sqlplus / <<endl | grep KEEP | sed 's/KEEP//;s/[ ]//g'
select 'KEEP' , max(sal) from emp;
exit
endl`
echo the answer is $x
其他方法,例如允许您读取多行输出该线程中也进行了讨论。
如果您不想打印标题,则应该指定
set head off
在您的 SQL*Plus 脚本中 - 如果您不需要标头,我不确定为什么要在脚本中显式设置标头...您想保留标头的某些部分吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)