Вызов хранимой процедуры в Oracle - PullRequest
0 голосов
/ 14 ноября 2009

Это должно быть что-то довольно простое и понятное, но по какой-то причине я не могу заставить его работать. Я создал свой 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 ]

4 голосов
/ 14 ноября 2009

Если вы гуглите по ошибке ORA-06575 , вы найдете:

Вы пытались выполнить инструкцию SQL который ссылается на функцию PLSQL, которая находится в недопустимом состоянии. Бывает когда функция скомпилирована с ошибки.

Вы можете решить эту проблему:

Исправьте ошибки и перекомпилируйте функция. Затем повторно выполните SQL утверждение.

Как только ваша процедура скомпилируется, вы можете выполнить ее следующим образом:

begin 
    zadmit_migrate_data(4);
end;
4 голосов
/ 14 ноября 2009

Не должен ли ваш оператор execute быть "execute zadmit_migrate_data (4);"

В любом случае, запустив эту команду:

SELECT object_name FROM user_objects WHERE status='INVALID';

скажет вам, если ваша процедура действительна или нет.

Выполнение вашей команды CREATE или REPLACE ..., затем немедленное выполнение команды

SHOW ERRORS

должен сообщить вам, какие ошибки были обнаружены при компиляции.

1 голос
/ 16 ноября 2009

Запустите это

SQL>  alter procedure zadmit_migrate_data compile;
SQL>  show errors

Учитывая простоту вашей процедуры, не составит труда диагностировать получившийся стек ошибок.

...