2
我想写一个存储过程,将有2个异常错误。SQL PL/SQL用户定义多个异常错误处理(空)
Create table Employee
(emp_num varchar(10) primary key,
emp_name varchar(10),
DOB date,
job_title varchar(15),
marriage_date date,
spouseid varchar(10) references Employee(emp_num),
dept_id varchar(10) references Department(dept_id));
正如你所看到的,它是一张有雇员信息的表格。这里有一个递归关系,表示如果配偶也是公司员工(spouseid + marriage_date),则需要提供配偶信息。 我创建了一个存储过程,请求雇员编号并为您提供spouseid,姓名和结婚日期。
CREATE OR REPLACE PROCEDURE DISP_SPOUSE
(SP_EMP_NUM IN EMPLOYEE.EMP_NUM%TYPE) AS
SP_NAME EMPLOYEE.EMP_NAME%TYPE;
SP_SPOUSEID EMPLOYEE.SPOUSEID%TYPE;
SP_MARRIAGE_DATE EMPLOYEE.MARRIAGE_DATE%TYPE;
BEGIN
SELECT SPOUSEID, EMP_NAME, MARRIAGE_DATE
INTO SP_SPOUSEID, SP_NAME, SP_MARRIAGE_DATE
FROM EMPLOYEE
WHERE EMP_NUM = SP_EMP_NUM;
DBMS_OUTPUT.PUT_LINE ((SP_SPOUSEID)||' '||
(SP_NAME)||' '||(SP_MARRIAGE_DATE));
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO EMPLOYEE WITH THAT NUMBER:'||SP_EMP_NUM);
END;
/
我还需要添加第二个用户定义的异常,如果没有spouseid,将会引发异常。所以我想是这样的:
DECLARE
SP_EXCEPTION EXCEPTION;
PRAGMA EXCEPTION_INIT (SP_EXCEPTION, -20001);
BEGIN
RAISE_APPLICATION_ERROR (-20001, 'NO EMPLOYEE SPOUSE');
EXCEPTION
WHEN SP_EXCEPTION
THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
/
,然后添加第二个例外存储过程的代码(后或NO_DATA_FOUND异常之前:
WHEN SPOUSEID IS NULL
RAISE SP_EXCEPTION;
end;
/
我在spouseid = NULL有问题。有编写不同的方式?(插入在spouseid一些值确实为空)。