2013-08-12 75 views
0

爲什麼我遇到下面代碼的編譯錯誤?我在嵌套中出錯了嗎?預計BEGIN當我得到的錯誤是遇到DECLARE ..Oracle函數相關查詢

DECLARE 
BEGIN 
    DECLARE 
     FUNCTION fn_Add1 (p_n1 NUMBER, p_n2 NUMBER) 
     RETURN NUMBER 
     AS 
     BEGIN 
     RETURN fn_Add2(p_n1,p_n2,40); 
     END; 

    DECLARE 
    FUNCTION fn_Add2 (p_n1 NUMBER, p_n2 NUMBER,p_n3 NUMBER) 
    RETURN NUMBER 
    AS 
    BEGIN 
     RETURN (p_n1+p_n2+p_n3); 
    END; 
END; 
BEGIN 
    DBMS_OUTPUT.PUT_LINE (fn_Add1(20,30)); 
END; 
/

回答

1

刪除嵌套BEGINDECLARE - 這樣它應該工作:

DECLARE 
    FUNCTION fn_Add2 (p_n1 NUMBER, p_n2 NUMBER,p_n3 NUMBER) 
    RETURN NUMBER IS 
    BEGIN 
     RETURN (p_n1+p_n2+p_n3); 
    END; 

    FUNCTION fn_Add1 (p_n1 NUMBER, p_n2 NUMBER) 
    RETURN NUMBER IS 
    BEGIN 
    RETURN fn_Add2(p_n1,p_n2,40); 
    END; 

BEGIN 
    DBMS_OUTPUT.PUT_LINE (fn_Add1(20,30)); 
END; 
/

附::我認爲它應該是IS而不是AS。祝你好運!

+0

我收到錯誤「FN_ADD2未在範圍內聲明」。 – RDPD

+0

不幸的是,我目前沒有訪問ORACLE數據庫:(......如果先定義'fn_Add2(...)'會發生什麼? – Trinimon

+0

它在fn_Add2()comefirst時有效..謝謝.. :) – RDPD