【发布时间】:2022-08-07 18:10:39
【问题描述】:
我创建了一个 PL/SQL 存储过程,我想从中返回输出并显示它。
我想将成功或失败消息的输出返回到变量中:MSG
我怎么需要这样做任何想法
PL/SQL 代码:
CREATE OR REPLACE PROCEDURE CHECKFILED
(
MY_NAME EMP.FIRSTNAME%TYPE,
MY_ID EMP.ID%TYPE
) RETURN VARCHAR2
IS
V_MSG VARCHAR(4000 CHAR);
BEGIN
SELECT FIRSTNAME INTO MY_NAME FROM EMP WHERE ID=MY_ID;
IF MY_NAME IS NOT NULL THEN
INSERT INTO CUSTOMER VALUES (UID,FIRSTNAME);
V_MSG=\'FIELD IS NOT EMPTY\';
ELSE
RAISE_APPLICATION_ERROR(-20000,\'FIELD IS EMPTY\');
END IF;
EXCEPTION
WHEN OTHERS THEN
V_MSG := SQLCODE || \'-\' || SQLERRM;
RETURN(V_MSG);
RETURN(V_MSG);
END;
调用存储过程:
DECLARE
MSG VARCHAR2(4000 CHAR);
BEGIN
SELECT CHECKFILED(\'10A\') AS MSG FROM DUAL;
END;
-
为什么需要这样做而不是使用 PL/SQL 中内置的错误处理?程序成功与否无需返回信息;相反,如果出现错误,您就知道它失败了,否则它就成功了。
-
只是为了评论代码,
SQLCODE || \'-\' || SQLERRM是多余的,因为sqlerrm已经包含sqlcode。例如,如果 sqlerrm 是ORA-12345 这里有一些错误消息, 那么 sqlcode 是-12345你会返回-12345-ORA-12345 这里有一些错误信息.为什么要这样做?