我正在尝试将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
答案 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;