2015-11-30 33 views
-2

我創建了一個包含一個過程的程序包,用於從country_ID不存在的表中刪除任何國家/地區。我寫了這個代碼:使用程序創建程序包Oracle

CREATE PACKAGE cust_sa AS 
    PROCEDURE del_cn3(c_cntry_id COUNTRIES.COUNTRY_ID%TYPE) 
    IS 
     v_error_code NUMBER; 
    BEGIN 
    DELETE from countries WHERE country_id =c_cntry_id; 

    IF SQL%NOTFOUND THEN 
     DBMS_OUTPUT.PUT_LINE('No such record'); 
    END IF; 
    EXCEPTION WHEN OTHERS THEN 
    v_error_code :=SQLCODE; 
    IF v_error_code =-2292 THEN 
     RAISE_APPLICATION_ERROR(-20004,'Organization ' || 
            TO_CHAR(c_cntry_id) || 
            ' site details defined for it.'); 
    END IF; 
    END del_cn3; 
END cust_sa; 
/

不過,我得到在創建這個包下面的兩個錯誤:

期待的 的一個時以下

(4號線)出現符號V_ERROR_CODE:語言

(最後一行)遇到符號CUST_SA 當期望以下之一時:

爲什麼錯誤出現以及如何解決它們?

+0

你的包(規格)應該只是程序標題 - 你也有程序的執行 - 即雲中包裝身體。 – thatjeffsmith

+0

Thnx。幫助:) – user3400060

+1

我希望你會添加一個「ELSE RAISE;」到你的其他例外情況。 –

回答

0

您應該規範和身體分割你這樣的代碼:

CREATE OR REPLACE PACKAGE cust_sa AS 
    PROCEDURE del_cn3(c_cntry_id COUNTRIES.COUNTRY_ID%TYPE); 
END cust_sa; 
/

CREATE OR REPLACE PACKAGE BODY cust_sa AS 

    PROCEDURE del_cn3(c_cntry_id COUNTRIES.COUNTRY_ID%TYPE) IS 
    v_error_code NUMBER; 
    BEGIN 
    DELETE FROM clients WHERE country_id = c_cntry_id; 

    IF SQL%NOTFOUND THEN 
     dbms_output.put_line('No such record'); 
    END IF; 
    EXCEPTION WHEN OTHERS THEN 
     v_error_code := SQLCODE; 
     IF v_error_code = -2292 THEN 
     raise_application_error(-20004, 'Organization ' || to_char(c_cntry_id) || ' ...'); 
     END IF; 
    END del_cn3; 

END cust_sa; 
/
0
We should always foolow some old school defined steps before creating Packages 

1) Create Package Specs 
2) Create Package Body. 

CREATE OR REPLACE PACKAGE cust_sa 
AS 
    PROCEDURE del_cn3(
     c_cntry_id IN EMP.EMPNO%TYPE); 
END cust_sa; 


CREATE OR REPLACE PACKAGE BODY cust_sa 
AS 
PROCEDURE del_cn3(
    c_cntry_id IN EMP.EMPNO%TYPE) 
IS 
    v_error_code NUMBER; 
BEGIN 
    DELETE FROM EMP WHERE EMPNO =c_cntry_id; 
    IF SQL%NOTFOUND THEN 
    DBMS_OUTPUT.PUT_LINE('No such record'); 
    END IF; 
EXCEPTION 
WHEN OTHERS THEN 
    v_error_code :=SQLCODE; 
    IF v_error_code =   -2292 THEN 
    RAISE_APPLICATION_ERROR(-20004,'Organization ' || TO_CHAR(c_cntry_id) || ' site details defined for it.'); 
    END IF; 
END del_cn3; 
END cust_sa;