Oracle 配置SQL*Plus只返回数据
我需要编写一个简单的shell函数,从Oracle数据库返回单个字段。例如,从dual中选择“ABC”;而ABC正是我所追求的 以下是我的功能:Oracle 配置SQL*Plus只返回数据,oracle,shell,unix,plsql,sqlplus,Oracle,Shell,Unix,Plsql,Sqlplus,我需要编写一个简单的shell函数,从Oracle数据库返回单个字段。例如,从dual中选择“ABC”;而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 f
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返回了大量的垃圾,例如欢迎使用Oracle和断开连接。。。在底部
如何仅从SQL结果集中提取数据,或者在本例中提取单个值,并将其传递到UNIX变量中,以便在shell中进行进一步操作
谢谢在这个askTom线程中有几种不同的方法 一种常见的方法是,在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
在您的SQL*Plus脚本中-如果您不想在脚本中显式设置头,我不知道为什么要在脚本中显式设置头。。。你想保留头部的某个部分吗?< p>基于贾斯廷的答案,这很好,当你只需要选择一个数字或令牌时,我认为这有点短,但更可读的版本:
x=`sqlplus -S / <<< "select 'KEEP' , max(sal) from emp;" | awk '/KEEP/{print $2}'`
通常,我会在Perl中执行此操作,但我们的Oracle::DBI库在我的solaris框中被破坏。。。所以我必须在shell中编写我的脚本…我想您应该先使用setserveroutput。有许多set命令控制oracle的输出。在这里搜索[bash][oracle]sqlnumber,您应该可以找到需要打开或关闭的其他内容。欢迎Oracle专家提交正确答案;-祝大家好运。设置服务器输出未关闭,但感谢您尝试设置头部未关闭,我仍然获得顶部和底部标题。我戴上它是因为我想那会给我列标题,这是我想要的。另一个给你,兄弟:
x=`sqlplus -S / <<< "select 'KEEP' , max(sal) from emp;" | awk '/KEEP/{print $2}'`