Для просмотра ошибок, которые могут возникать при выполнении того или иного оператора PL/SQL, в SQL*Plus служит команда show errors. Однако фиксироваться в базе данных выявляемые подобным образом ошибки не будут. В Oracle Database 11g для сохранения ошибок SQL PL/SQL и SQL*Plus в специальной таблице можно применять новый механизм регистрации ошибок, настраиваемый с помощью SQL*Plus-команды SET.В частности, при выполнении команды SET ERRORLOGGING ON база данных будет далее записывать все ошибки, возникающие в результате выполнения операторов SQL или PL/SQL, в таблицу по имени sperrolog. Вместо предлагаемой по умолчанию таблицы sperrolog для хранения ошибок можно также задавать и собственную таблицу.
При обнаружении ошибок в этой таблице будут сохраняться следующие сведения:
- имя пользователя;
- время возникновения ошибки;
- имя сценария, если таковой имел место;
- назначенный пользователем идентификатор;
- сообщение об ошибке;
- оператор, приведший к возникновению данной ошибки.
По умолчанию механизм регистрации ошибок находится в отключенном состоянии:
SQL> show errorlogging errorlogging is OFF SQL>
Активизировать его можно с помощью следующей команды SQL*Plus:
SQL> set errorlogging on;
После включения механизма регистрации нужно обязательно удостовериться в том,что он действительно был включен, выдав такую команду:
SQ> connect hr/hr Connected. SQL> show errorlogging errorlogging is ON TABLE HR.SPERRORLOG SQL>
Обратите внимание, что база данных не только подтверждает, что механизм регистрации ошибок был включен, но и также показывает, в какой именно таблице будут сохраняться сообщения об ошибках (hr.sperrorlog). Права на владение этой таблицей предоставляются пользователю, включившему механизм регистрации ошибок. В данном случае таковым является HR.
После включения механизма регистрации ошибок можно выполнять запросы к таблице ошибок и получать информацию о сообщениях, сгенерированных при выполнении того или иного проблемного оператора SQL или PL/SQL, а также прочие сведения.
Ниже приведен пример:
SQL> select username,statement,message from sperrorlog; USERNAME STATEMENT MESSAGE --------- --------------------------- -------------------------- HR create table employees as ORA-00955: name is already select * from employees used by an existing object имя уже используется существующим объектом HR select names from employees ORA-00904: "NAMES": invalid identifier недопустимый идентификатор SQL>
В этом примере первое сообщение об ошибке показывает, что оператор create table,выданный пользователем HR, выполнить не удалось из-за того, что таблица с именем EMPLOYEES уже существует, а второе — что выполнение оператора SELECT завершилось ошибкой по той причине, что он ссылался на несуществующий столбец в таблице EMPLOYEES. Таблица регистрации ошибок может оказаться очень полезной при выявлении и устранении ошибок в коде SQL и PL/SQL.