Вызов хранимой процедуры в Oracle

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

Решение

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

SQL>  alter procedure zadmit_migrate_data compile;
SQL>  show errors

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

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

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

SELECT object_name FROM user_objects WHERE status='INVALID';

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

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

SHOW ERRORS

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

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

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

Вы можете решить эту проблему следующим образом:

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

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

begin 
    zadmit_migrate_data(4);
end;
Другие вопросы по тегам