2016-12-05 39 views
-2

嘿傢伙我有一個問題,當我嘗試在我的第一個私人頭文件下面添加第二個私人頭時出現錯誤。如何在Package Body oracle pl/sql中添加第二個私有函數?

CREATE OR REPLACE PACKAGE TEST IS 
PROCEDURE TEST2(VARIABLE1 IN NUMBER, VARIABLE2 OUT NUMBER); 
END; 

CREATE OR REPLACE PACK BODY TEST IS 
FUNCTION PRIVATE1 (VARIABLE1 IN NUMBER) 
RETURN NUMBER; 
FUNCTION PRIVATE2 (VARIABLE2 IN NUMBER) 
RETURN NUMBER; 
PROCEDURE TEST2(VARIABLE IN NUMBER, VARIABLE OUT NUMBER) 
BEGIN 
...... 
END; 
FUNCTION PRIVATE1 (VARIABLE1 IN NUMBER) 
RETURN NUMBER 
IS 
BEGIN 
........ 
END; 
FUNCTION PRIVATE2 (VARIABLE2 IN NUMBER) 
RETURN NUMBER 
IS 
BEGIN 
....... 
END; 
END; 

關於如何修復它的任何建議?

+1

和錯誤是...? – Aleksej

+1

請發佈一個不工作的特定構造示例,以及完整的錯誤消息和行號。發表幾行僞代碼,並說你「出錯了」會讓你失望。 –

回答

1
FUNCTION PRIVATE2 (VARIABLE2 IN NUMBER) 
RETURN NUMBER; // REMOVE semi colon from here 
IS 
BEGIN 
....... 
END; 
+0

你得到的錯誤是什麼?在sql中可能不使用函數 – Girish

+0

。 –

+0

在你的代碼中,你還沒有調用任何函數,只有當函數用於sql或者可能在代碼中時,這個錯誤纔會出現,這兩個東西在你的代碼中都是不可見的。它在編譯時不太可能得到這個錯誤。爲了獲得幫助,您需要共享相關代碼以及編譯期間返回的詳細錯誤。 – Girish

0

您可能正在使用SQL中的私有函數 - 這不受支持。爲了在SQL中使用函數,你必須在包規範中定義它。

我們需要private1和private2函數的源代碼以便能夠幫助更多。

[編輯]這裏是無法編譯由於SQL使用私有函數封裝的例子:

create or replace package test_pkg is 
end; 
/
create or replace package body test_pkg is 

    function F1 return number is 
    begin 
    return 2; 
    end; 

    function F2 return number is 
    lnNumber number; 
    begin 
    select F1 -- function declared only in the package body 
     into lnNumber 
     from dual; 
    return lnNumber + 1; 
    end; 

end; 
/
PLS-00231: function 'F1' may not be used in SQL 
PL/SQL: ORA-00904: "F1": invalid identifier 
PL/SQL: SQL Statement ignored 
+0

如果我從包中刪除第二個私有函數,則會成功創建包。 –

+0

但是你顯然需要這個函數,否則你就不會在包中使用它?解決方案是從SQL中刪除函數調用,在包的規範中聲明函數,或者以你的方式更改代碼不需要從SQL調用函數 –

+0

我想我將不得不採用第二種方法。 –

相關問題