2013-05-03 2 views
2

2 개의 예외 오류가있는 저장 프로 시저를 작성하려고합니다.SQL PL/SQL 사용자 정의 다중 예외 오류 처리 (null)

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). 직원 번호를 묻는 저장 프로 시저를 만들었고 배우자 이름, 이름 및 결혼 날짜를 제공합니다.

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 예외 전에 (저장 프로 시저 코드에 두 번째 예외를 추가 : 나는 spouseid = 널 (null)에 문제가있어

WHEN SPOUSEID IS NULL 
RAISE SP_EXCEPTION; 

end; 
/

을 . 그를 작성하는 다른 방법이? (spouseid에 삽입 된 일부 값은 참으로 널 (null)입니다).

답변

2

신경 끄시 고 내가 그것을 해결했다.

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; 

SP_EXCEPTION EXCEPTION; 


BEGIN 

SELECT SPOUSEID, EMP_NAME, MARRIAGE_DATE 
INTO SP_SPOUSEID, SP_NAME, SP_MARRIAGE_DATE 
FROM EMPLOYEE 
WHERE EMP_NUM = SP_EMP_NUM; 

IF 
SP_SPOUSEID IS NULL THEN 
RAISE SP_EXCEPTION; 


ELSE 
DBMS_OUTPUT.PUT_LINE ((SP_SPOUSEID)||' '|| 
(SP_NAME)||' '||(SP_MARRIAGE_DATE)); 

END IF; 

EXCEPTION 
WHEN NO_DATA_FOUND THEN 
DBMS_OUTPUT.PUT_LINE 
('NO EMPLOYEE WITH THAT NUMBER:'||SP_EMP_NUM); 
WHEN SP_EXCEPTION THEN 
DBMS_OUTPUT.PUT_LINE ('NO SPOUSE AS EMPLOYEE'); 
END; 
/