2010-09-09 91 views
0

我已經創建了下面的過程,但它給出了PLS-00302錯誤。由於提前:)PLSQL錯誤PLS-00302

ORA-06550:線11,第12列:PLS-00302:組分 'GET_LATEST_LSR_TRANSACTION' 必須是 聲明ORA-06550:線11,第3欄: PL/SQL:語句忽略

CREATE OR REPLACE procedure SEA_USER.Get_Latest_LSR_Transaction (tn IN VARCHAR2, pon OUT VARCHAR2, duedate OUT TIMESTAMP) 
IS 
    trans_oid NUMBER(10) := 0; 
    foc_trans_oid NUMBER(10) := 0; 

BEGIN 
    SELECT TRANS_OID INTO trans_oid FROM SEA_LSR_TN WHERE tn BETWEEN STARTTN AND ENDTN; 

    SELECT MAX(T.OID) INTO foc_trans_oid FROM SEA_LSR_TRANS T, SEA_LSR_TXEVENT_HISTORY H WHERE T.OID IN (trans_oid) AND T.OID = H.TRANS_PARENT_OID AND H.EVENT_CODE IN ('focaccept', 'suppaccept') AND T.REQTYP = 'CB'; 

    IF foc_trans_oid != 0 
    THEN 
     SELECT PON, DUEDATE INTO pon, duedate FROM SEA_LSR_TRANS WHERE OID = foc_trans_oid; 
    ELSE 
     SELECT PON, DUEDATE INTO pon, duedate FROM SEA_LSR_TRANS WHERE OID = trans_oid; 
    END IF; 
END; 
/
+1

這是您創建時的編譯錯誤還是運行時的錯誤?如果是後者,當你得到這個錯誤時你如何運行它? – 2010-09-09 08:32:05

+0

運行該過程時出現此錯誤。我使用Toad工具創建並運行該過程。通過使用「執行過程」選項運行它。 – praveen 2010-09-09 08:55:50

回答

0

如果SEA_USER模式不存在,或者您沒有訪問到它,你會得到一個錯誤ORA-01031: insufficient privileges當您嘗試創建您列出的程序。如果程序正文是有效的,我可以看到沒有理由不編譯。

鑑於此,如果當您嘗試調用存儲過程接收ORA-06550錯誤,那麼只有兩個,我能想到的可能性:

  1. 你是從 一個調用程序除SEA_USER之外的模式,其中 沒有合適的 授予的權限以允許它調用另一個用戶的過程。

  2. 程序尚未在 SEA_USER架構中創建。

您能否向我們提供一個如何調用存儲過程的示例,並確認您正在使用的用戶?

+0

過程成功創建沒有問題,但在當我試圖執行它給出錯誤「ORA-06550:第11行,第12列:PLS-00302:組件'GET_LATEST_LSR_TRANSACTION'必須聲明ORA-06550:第11行,第3列: PL/SQL:語句被忽略「 – praveen 2010-09-09 08:48:22

+0

@praveen您在執行過程時登錄了哪些用戶?你如何執行程序? – ninesided 2010-09-09 11:44:08