【发布时间】:2016-01-24 09:00:44
【问题描述】:
当过程未插入记录时,我试图引发异常。我的代码如下:
CREATE OR REPLACE PROCEDURE OPEN_CLASS(
p_class IN TUTPRAC.CLASSID%TYPE,
p_unitc IN TUTPRAC.UNITCODE%TYPE,
p_classd IN TUTPRAC.CLASS_DAY%TYPE,
p_classt IN TUTPRAC.CLASS_TIME%TYPE,
p_classtp IN TUTPRAC.CLASS_TYPE%TYPE,
p_roomnm IN TUTPRAC.ROOMNUM%TYPE)
IS
-- Variables
x number:=0;
y number:=0;
CLASS_CLASH EXCEPTION;
BEGIN
-- checks
SELECT nvl((SELECT 1
FROM TUTPRAC
WHERE UNITCODE = p_unitc and CLASS_DAY = p_classd
or CLASS_DAY = p_classd and CLASS_TIME = p_classt
and ROOMNUM = p_roomnm) , 0)
INTO x FROM dual;
SELECT nvl((SELECT 1
FROM UNITSTREAM
WHERE UNITCODE = p_unitc and DAY = p_classd
or DAY = p_classd and TIME = p_classt
and LOCATION = p_roomnm) , 0)
INTO y FROM dual;
-- insert
IF (x = 0 and y = 0) THEN
INSERT INTO TUTPRAC (CLASSID, UNITCODE, CLASS_DAY, CLASS_TIME, CLASS_TYPE, ROOMNUM)
VALUES (p_class, p_unitc, p_classd, p_classt, p_classtp, p_roomnm);
ELSE
RAISE CLASS_CLASH;
END IF;
EXCEPTION
WHEN CLASS_CLASH THEN
DBMS_OUTPUT.PUT_LINE('Record was not inserted due to a class clash.');
END OPEN_CLASS;
当我运行这个过程时,如果记录没有任何冲突,它会显示PL/SQL procedure successfully completed.,它会在表中添加一条记录。问题是,即使它发现冲突并且 没有 添加记录,它仍然会显示相同的消息,而不是我的异常的输出。
【问题讨论】:
-
stackoverflow.com/q/6020450/2091410 的可能重复项 - 请参阅第一个答案,这应该会有所帮助。