Дать описание кода завершения СУБД

Назначение
 

Команда GETE возвращает текстовое описание кода завершения операции СУБД ЛИНТЕР.

Параметры вызова

inter(CBL, NULL, NULL, [CondBuf], RowBuf);

Входные данные

Входными данными является контрольный блок CBL.

В нем должны быть заполнены поля:

Имя поля Значение
Command "GETE"
RowId Числовое значение кода завершения СУБД
LnBufRow Длина буфера выборки данных
Node Имя ЛИНТЕР-сервера
Выходные данные

Выходными данными являются:

  • контрольный блок CBL;

  • буфер выборки данных RowBuf.

В контрольном блоке будут возвращены:

Имя поля Значение
CodErr Код завершения операции СУБД ЛИНТЕР
LnBufRow Фактическая длина буфера выборки данных
SysErr Код состояния ОС

Текстовое описание кода завершения возвращается в буфере выборки данных RowBuf.

Для кодов завершения СУБД, относящихся к созданию (модификации) триггеров и хранимых процедур, вместо текста выдается другая информация (пункт «Обработка ошибок трансляции хранимых процедур (триггеров)»).

Описание

При выполнении команды GETE используется таблица ERRORS, содержащая текстовые описания кодов завершения. Если эта таблица отсутствует в БД, или задан несуществующий числовой код завершения, то в RowBuf возвращается следующий текст: Linter error NNNN

где NNNN – указанный в команде GETE числовой код завершения.

Примечание

Для создания таблицы ERRORS, в случае ее отсутствия в БД, необходимо выполнить командный файл cerrors.sql и затем загрузить в созданную таблицу данные из файла errors.lod. Указанные файлы входят в состав дистрибутива СУБД ЛИНТЕР.

Коды завершения
Код Описание
NORMAL Нормальное завершение
SMALLBUFKOR Недостаточный размер буфера выборки данных
Пример формирования команды
#include < string.h >
#include < stdlib.h >
#include "inter.h"

L_LONG LinterGETE(TCBL *pCBL, L_LONG CodErr, void *Str, L_WORD StrLen)
   {
   memcpy(pCBL- >Command, "GETE", 4);
   pCBL- >LnBufRow=StrLen;
   pCBL- >RowId=CodErr;
   pCBL- >PrzExe &= ~Q_ASYNC;
   inter(pCBL, NULL, NULL, NULL, Str);
   *((char*)Str + ((pCBL- >LnBufRow >StrLen)?(StrLen-1):(pCBL- >LnBufRow))) = 0;
   return pCBL- >CodErr;
   }
Пример использования команды
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "inter.h"
#include "exlib.h"

#ifndef WINCE
int    main()
#else
int    exgete()
#endif
   {
   TCBL  CBLconnect;
   L_CHAR Name_Pass[] = "SYSTEM/MANAGER8";
   L_CHAR Node[] = "        ";
   L_WORD Priority = 0;
   L_LONG PrzExe = M_EXCLUSIVE | M_BINARY;
   L_LONG Err;
   L_CHAR  Str[256];
   L_CHAR  Query[] = "select ERROR NAME,FIRSTNAM,SEX from PERSON;";
   /* ошибка */

   memset(&CBLconnect,0,sizeof(TCBL));
   Err=LinterOPEN(&CBLconnect, Name_Pass, Node, Priority, PrzExe);
   if (Err != NORMAL)
     PrintError(&CBLconnect);
   printf("Connect to RDBMS Linter\n");

   LinterSLCT(&CBLconnect, PrzExe, Query, NULL, L_MAXWORD, NULL);
   Err=LinterGETE(&CBLconnect, CBLconnect.CodErr, Str, 255);
   if (Err != NORMAL)
     PrintError(&CBLconnect);
   printf("GETE: %s\n", Str);

   printf("End Example\n");

   return 0;
   }