Обработка ошибок трансляции хранимых процедур (триггеров)

Для получения подробного описания ошибок трансляции следует подать команду GETE по тому же каналу, по которому подавался запрос на трансляцию (CREATE PROCEDURE или ALTER PROCEDURE), передавая ей в качестве входного параметра код завершения Proc_Translation_Error («ошибка трансляции хранимой процедуры (триггера)»). В этом случае в буфере RowBuf вместо текстового описания кода завершения возвращается информация следующего вида:

  • количество ошибок трансляции (2 байта);

  • соответствующее количество описателей ошибок трансляции.

Описатель ошибки содержит заголовок и, в зависимости от типа ошибки, дополнительные параметры. Заголовок представляет собой структуру типа ERRS_DESCR, которая описана в заголовочном файле inter.h.

Заголовок описателя ошибки содержит следующие поля:

Имя поля Значение
CodErr

Код конкретной ошибки трансляции (например, неизвестный оператор процедурного языка); расшифровка (текст) этого кода может быть получена путем подачи команды GETE с указанием ей в качестве анализируемого кода завершения значение CodErr +10000

Row

Номер строки исходного текста процедуры (триггера), в которой обнаружена синтаксическая ошибка. Если значение поля Row равно -1, это говорит о том, что ошибка произошла не в какой-либо конкретной позиции, а относится ко всему тексту (например, «Слишком много ошибок»)

Position

Номер позиции в строке Row, где обнаружена ошибка. Для поля Row со значением -1 содержимое данного поля не определено

ArgType

Характеристика диагностического сообщения. Если значение ArgType равно PROC_ERR_NOARG, то описатель состоит из одного заголовка. В противном случае кроме кода ошибки возвращается и дополнительный параметр, который располагается непосредственно за заголовком. Если значение ArgType равно PROC_ERR_ARGSHORT, то в качестве параметра передается двухбайтное целое число, а расшифровка ошибки, полученная с помощью команды GETE, представляет собой форматную строку для стандартной функции sprintf языка программирования С, содержащую символы '%d', вместо которых подставляется параметр. Если значение ArgType равно PROC_ERR_ARGSTRING, то в качестве параметра передается строка, а расшифровка ошибки, полученная с помощью команды GETE, представляет собой форматную строку для стандартной функции sprintf языка программирования С, содержащую символы '%s', вместо которых подставляется параметр. Параметр-строка передается как 2 байта длины и далее соответствующее количество символов

Пример типовой последовательности анализа ошибок трансляции процедур на языке C/C++ приведен в приложении 12.