Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 配置SQL*Plus只返回数据_Oracle_Shell_Unix_Plsql_Sqlplus - Fatal编程技术网

Oracle 配置SQL*Plus只返回数据

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

我需要编写一个简单的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 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}'`