2009-11-13 6 views
0

Это должно быть что-то довольно простое и прямолинейное, но по какой-то причине я не могу заставить его работать. Я создал свой SProc так:Вызов хранимой процедуры в Oracle

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. 

Это может быть меньше времени, чтобы указать, где я буду в порядке, но если кто-нибудь может сказать мне, где я буду неправильно, что, вероятно, будет более полезным. :)

+0

Исправить меня, если я ошибаюсь, но - в этом случае ветка 'else' никогда не будет удачной? Если оператор select ничего не возвращает, тогда будет вызвано исключение NO_DATA_FOUND, поэтому я не вижу смысла иметь условие else. – Sathya

+0

@ Сатья - ты ошибаешься. Нет ничего, что указывало бы на то, что PIDM является обязательным, поэтому вполне возможно найти запись, но в этом столбце есть NULL. – APC

+0

@APC - Gotacha! – Sathya

ответ

1

Запуск этого

SQL> alter procedure zadmit_migrate_data compile; 
SQL> show errors 

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

+0

Спасибо. Это был самый простой способ узнать, что происходит, учитывая приведенные ответы.Оказывается, мой SProc не узнал таблицу, поэтому я перешел в ту же схему, что и таблица, и все хорошо. –

4

Не должен ли выполняться оператор execute «выполнить zadmit_migrate_data (4);» ?

Во всяком случае, выполнив команду:

SELECT object_name FROM user_objects WHERE status='INVALID'; 

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

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

SHOW ERRORS 

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

+0

Вы можете получить более немедленную обратную связь по вопросам компиляции PL/SQL, если вы используете инструмент SQL Developer SQL для написания пакетов. При этом, зная, как делать все с помощью SQLPLUS и обычного текстового редактора, это реальная выгода, если вы застряли без причудливых инструментов. – Cephas

4

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

You tried to execute an SQL statement that referenced a PLSQL function that is in an invalid state. This happens when the function is compiled with errors.

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

Correct the errors and then re-compile the function. Then re-execute the SQL statement.

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

begin 
    zadmit_migrate_data(4); 
end; 
Смежные вопросы