0

这应该是相当简单直接的事情,但由于某种原因我无法让它工作。我已经像这样创建了我的 SProc:

create or replace procedure zadmit_migrate_data (zadmit_seq_no number)
is
    thisPIDM number;
begin
    select pidm into thisPIDM
    from saturn.zadmit_core_data
    where pk_seqno = zadmit_seq_no;

    if thisPIDM is not null then
        dbms_output.put_line('thisPIDM is NOT null!');    
    else
        dbms_output.put_line('thisPIDM is null!');
    end if;
end zadmit_migrate_data;

现在我试着这样称呼它:

call zadmit_migrate_data(4);

然后我得到这个错误:

ORA-06575 Package or function is in an invalid state.

所以我尝试了这个:

execute zadmit_core_data(4);

而是得到这个错误:

ORA-00900 Invalid SQL statement.

指出我要去的地方可能会花费更少的时间,但是如果有人能告诉我哪里出错了,那可能会更有用。:)

4

3 回答 3

4

您的执行语句不应该是“执行 zadmit_migrate_data(4);”吗??

无论如何,运行这个命令:

SELECT object_name FROM user_objects WHERE status='INVALID';

会告诉您您的程序是否有效。

执行您的 CREATE 或 REPLACE ... 命令,然后立即执行该命令

SHOW ERRORS

应该告诉你遇到了哪些编译错误。

于 2009-11-13T23:27:18.773 回答
4

如果你用谷歌搜索错误ORA-06575,你会发现:

您试图执行引用处于无效状态的 PLSQL 函数的 SQL 语句。当函数编译错误时会发生这种情况。

您可以通过以下方式解决此问题:

更正错误,然后重新编译函数。然后重新执行 SQL 语句。

一旦你的程序编译完成,你可以像这样执行它:

begin 
    zadmit_migrate_data(4);
end;
于 2009-11-13T23:27:53.480 回答
1

运行这个

SQL>  alter procedure zadmit_migrate_data compile;
SQL>  show errors

鉴于您的程序的简单性,诊断产生的错误堆栈应该不难。

于 2009-11-16T09:42:01.660 回答