在Oracle中调用存储过程

时间:2009-11-13 23:01:53

标签: sql oracle stored-procedures ora-00900

这应该是相当简单和直接的事情,但由于某种原因,我无法让它发挥作用。我像这样创建了我的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.

指出我正确的地方可能不那么费时,但如果有人能告诉我哪里出错了可能会更有用。 :)

3 个答案:

答案 0 :(得分:4)

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

无论如何,运行此命令:

SELECT object_name FROM user_objects WHERE status='INVALID';

会告诉您程序是否有效。

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

SHOW ERRORS

应该告诉你遇到了什么编译错误。

答案 1 :(得分:4)

如果您的Google错误ORA-06575,您会发现:

  

您尝试执行SQL语句   引用了PLSQL函数   处于无效状态。有时候是这样的   用函数编译时   错误。

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

  

更正错误然后重新编译   功能。然后重新执行SQL   言。

一旦你的程序编译完毕,就可以执行它:

begin 
    zadmit_migrate_data(4);
end;

答案 2 :(得分:1)

运行此

SQL>  alter procedure zadmit_migrate_data compile;
SQL>  show errors

鉴于程序简单,诊断结果错误堆栈应该不难。