Показать ошибки в sql плюс - PullRequest
1 голос
/ 17 апреля 2020

У меня есть файл myFile.sql, который содержит список скриптов для компиляции:

@"Directory\package1.sql"
@"Directory\package2.sql"
@"Directory\package3.sql"
@"Directory\package4.sql"

У меня есть следующий скрипт:

SPOOL Directory\Upgrade.log
@"Directory\myFile.sql"
SPOOL OFF

Некоторые пакеты в myFile.sql имеют ошибки, но в Upgrade.log У меня нет сведений об ошибках, у меня появляется сообщение Предупреждение: Package body created with compilation errors. Как добавить детали ошибки, не добавляя SHOW ERR после каждой строки в MyFile.sql? В upgrade.log я хочу иметь это:

Package1 created
Warning Package body created with compilation errors.
**Error detail1**

Package2 created
Warning Package body created with compilation errors.
**Error detail2**

Мне нужен хук в sqlplus , чтобы показать ошибку автоматически после каждого создания пакета, если есть ошибка. Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Начиная с Oracle 11.1 и далее, вы можете использовать функцию регистрации ошибок SQLPlus *1003*. Вы можете прочитать больше о SQL* Журнале ошибок Plus - Новая версия функции 11.1 .

SQL* Журнале ошибок Plus по умолчанию установлено значение OFF. Таким образом, вам нужно set errorlogging on, чтобы использовать таблицу SPERRORLOG.

Демонстрация:

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> desc sperrorlog;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 USERNAME                                           VARCHAR2(256)
 TIMESTAMP                                          TIMESTAMP(6)
 SCRIPT                                             VARCHAR2(1024)
 IDENTIFIER                                         VARCHAR2(256)
 MESSAGE                                            CLOB
 STATEMENT                                          CLOB

SQL> truncate table sperrorlog;

Table truncated.

SQL> set errorlogging on;
SQL> selct * from dual;
SP2-0734: unknown command beginning "selct * fr..." - rest of line ignored.
SQL> select timestamp, username, script, statement, message from sperrorlog;

TIMESTAMP   USERNAME     STATEMENT           MESSAGE
----------- --------     ------------------  -------
17-APR-2020 SCOTT        selct * from dual;  SP2-0734: unknown command beginning "selct * fr..." - rest of line ignored.

Аналогично, вы можете фиксировать ошибки PLS тоже. Они начнутся с кода ошибки SP.

0 голосов
/ 17 апреля 2020

Одним из методов является запрос словарного представления USER_ERRORS, или ALL_ERRORS.

Из документации :

ALL_ERRORS описывает текущий ошибки в сохраненных объектах, доступных текущему пользователю.

USER_ERRORS дает ту же информацию для объектов, принадлежащих текущему пользователю.

...