Как найти ошибку, вызывающую ora-06575? - PullRequest
4 голосов
/ 20 марта 2012

Недавно мне пришлось написать функцию оракула, и ошибка ora-06575 выскочила ужасно много. Обычно это происходило из-за отсутствия двоеточия в присваивании, например: z = 5 (против z: = 5) Или пропущенный ';' в конце выписки.

Как бы то ни было, я смог создать функцию, но она не удалась во время выполнения с этой ошибкой и не дал подсказки о том, где была проблема (за исключением того, что она была в функции).

Я написал одну и ту же функцию в MSSQL и Sybase, и оба они на самом деле пытались указать мне на место каких-либо ошибок. Так что я полагаю, что я делаю что-то не так в Oracle - он не может просто сказать мне «есть ошибка».

В оракуле у меня есть такое утверждение:

CREATE OR REPLACE
  FUNCTION...

Я компилирую функцию из разработчика SQL, выбрав ее и нажав F9. Когда я выбираю оператор, который выполняет функцию, и нажимаю F9, я получаю ошибку ora-06575.

Если я нажму F5 для компиляции функции, она скажет мне:

ORA-24344: success with compilation error

  Compiled.

Итак, я нашел этот сайт: http://www.dba -oracle.com / t_ora_24344_success_with_compilation_error.htm Но я не могу запустить «показать ошибки». Когда я запускаю его, я не получаю вывод, который вижу.

Может ли это работать только из sqlplus? Я использую SQL-разработчик, я бы предпочел придерживаться SQL-разработчика. Я что-то упускаю? Я хочу, чтобы он сказал мне, где ошибка.

Ответы [ 2 ]

10 голосов
/ 20 марта 2012

SHOW ERRORS - это команда sql * plus
Вы также можете запросить USER_ERRORS представление

SELECT line, position, text
FROM user_errors
WHERE name = '<<your_object_name>>'
4 голосов
/ 20 марта 2012

SHOW ERRORS работает и в SQL * Developer (по крайней мере, в тех версиях, которые я недавно использовал, конечно, 3.1).Вы упомянули в комментарии, что вы подключены как SYS, поэтому я очень надеюсь, что вы создаете свою функцию явно в другой схеме - я бы в любом случае избежал этого на случай, если вы однажды забудете, и измените любой из предварительно собранныхсхемы (SYS, SYSTEM и т. д.) - плохая идея.Если это так, вам нужно добавить префикс ошибочного объекта к схеме:

create or replace function my_schema.x return number is
begin
    return sysdate;
end;
/
show errors my_schema.x

При запуске в виде скрипта (F5) это говорит:

FUNCTION X compiled
Warning: execution completed with warning
3/8    PLS-00382: expression is of wrong type
3/1    PL/SQL: Statement ignored

Первые две строки выводаисходить из компиляции функций, последние два из show errors.Вы также можете запустить два оператора отдельно с помощью F9, чтобы увидеть одинаковые результаты.

Но я не уверен, как вы получаете ORA-24344, так что, возможно, вы используете более раннюю версию;и возможно, что это не сработает.Однако решение ABCade будет работать независимо от вашего клиента.

...