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

use*_*422 3 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;
Run Code Online (Sandbox Code Playgroud)

这是我的shell脚本:

sqlplus -s user/pwd <<EOF
@../sql/tester.sql
EOF
RETVAL=$?
echo $RETVAL
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*sta 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
Run Code Online (Sandbox Code Playgroud)