2010-09-09 124 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