2012-08-27 38 views
2

我試圖在包內調用Oracle存儲過程,我得到這個錯誤: SQL錯誤:ORA-06576:不是有效的函數或過程名如何在包中調用Oracle過程?

我使用SQL Developer和本是我使用

call WEATHERDATAUPDATES.GetLastRunDate("WeatherData") 

這裏的命令是包/程序

PACKAGE BODY WEATHERDATAUPDATES AS 

    PROCEDURE GetLastRunDate(PROCESS IN VARCHAR2, RUNDATE OUT DATE) AS 
    BEGIN 
    SELECT rundate FROM Marcie.last_rundate 
    where process = PROCESS; 
    END GetLastRunDate; 

END WEATHERDATAUPDATES; 

我很新的Oracle包和不知道我錯過了什麼。我試過搜索,但無法找到有效的答案。有人能告訴我我錯過了什麼嗎?

感謝, 的Marcie

回答

3

GetLastRunDate有2個參數(流程和rundate),但你只有通過1你的電話。

既然你想傳遞的第二個參數了一個辦法是讓它的功能和返回rundate ...

PACKAGE BODY WEATHERDATAUPDATES AS 

    FUNCTION GetLastRunDate(PROCESS IN VARCHAR2) 
    RETURN DATE 
    AS 
    lDate DATE; 
    BEGIN 
    SELECT rundate 
    INTO lDate 
    FROM Marcie.last_rundate 
    where process = PROCESS; 

    RETURN lDate; 
    END GetLastRunDate; 

END WEATHERDATAUPDATES; 
+0

我認爲這也可能是一個權威問題。感謝您的輸入。 – Marcie

3

在你的程序中你是不是把檢索到的值的任何地方,你應該使用INTO

...  
    PROCEDURE GetLastRunDate(PROCESS IN VARCHAR2, RUNDATE OUT DATE) AS 
    BEGIN 
    SELECT rundate 
    INTO RUNDATE 
    FROM Marcie.last_rundate 
    where process = PROCESS; 
    END GetLastRunDate; 
... 

在呼叫傳遞變量的輸出參數RUNDATE OUT DATE

將呼叫在PL/SQL塊:

DECLARE 
    lastRunDate DATE; 
BEGIN 
    WEATHERDATAUPDATES.GetLastRunDate("WeatherData",lastRunDate); 
    -- do something with lastRunDate 
END; 
+0

我認爲這也可能是一個權威問題。感謝您的輸入。 – Marcie

2

,你們充分展示您的包裹身體,但不規範 - 檢查GetLastRunDate在包裝規格聲明。

+0

是的你是對的,如果它只是在身體內宣佈,那麼從外部調用程序可能根本不可能。它只在包內部可用。 – user75ponic