SQLPLUS输出到shell脚本而不返回值

时间:2011-10-10 17:06:26

标签: oracle

我正在尝试将sqlplus输出返回到shell脚本。这可能听起来很简单,但我在网上搜索了一段时间,无法使我的脚本工作。

这是我的pl / sql脚本:

SET SERVEROUTPUT ON

DECLARE 
X_RETURN_MSG VARCHAR2(32767);
X_RETURN_CODE NUMBER;

BEGIN 
X_RETURN_MSG := NULL;
X_RETURN_CODE := 5;

COMMIT;
END;

EXIT X_RETURN_CODE;

这是我的shell脚本:

sqlplus -s user/pwd <<EOF
@../sql/tester.sql
EOF
RETVAL=$?
echo $RETVAL

$ RETVAL总是返回0,即使我有X_RETURN_CODE:= 5

3 个答案:

答案 0 :(得分:6)

X_RETURN_CODE没有超出声明它的PL / SQL块范围的含义。您需要使用SQLPlus绑定变量。

SQL> VARIABLE return_code NUMBER
SQL> BEGIN
  2    :return_code := 5;
  3  END;
  4  /

PL/SQL procedure successfully completed.

SQL> EXIT :return_code
Disconnected from Oracle Database 10g Release 10.2.0.4.0 - Production
> echo $?
5

答案 1 :(得分:0)

我的猜测是END标记了块的结尾,X_RETURN_CODE超出了范围,所以它默认为0.或者你应该考虑使用RETURN语句而不是EXIT。

答案 2 :(得分:0)

$ sqlplus -s <<!
> / as sysdba
> @tester
> !

PL/SQL procedure successfully completed.

$ echo $?
5

$ cat tester.sql
SET SERVEROUTPUT ON

var X_RETURN_CODE number

DECLARE
X_RETURN_MSG VARCHAR2(32767);

BEGIN
X_RETURN_MSG := NULL;
:X_RETURN_CODE := 5;

COMMIT;
END;
/

EXIT :X_RETURN_CODE;