Дать описание столбца таблицы

Назначение
 

Команда FATR используется для получения системной информации о столбце таблицы.

Справочная информация содержит следующие сведения:

  • тип данных столбца;

  • точность;

  • масштаб;

  • длина столбца в байтах;

  • признак ключа;

  • номер файла области индексов для индекса по столбцу;

  • признак ссылающегося столбца;

  • номер байта, с которого начинается значение столбца в неупакованной записи;

  • наличие операции удаления по ссылочной целостности;

  • наличие операции обновления по ссылочной целостности;

  • порядковый номер столбца в составном ключе;

  • группа доступа;

  • уровни доступа;

  • начальное значение для автоинкремента;

  • значение по умолчанию;

  • количество ссылок;

  • идентификатор внешней таблицы;

  • флаги столбца;

  • номер первой страницы индекса верхнего уровня;

  • номер последней страницы индекса верхнего уровня.

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

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

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

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

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

  • буфер описания параметров VarBuf.

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

Имя поля Значение
NumChan Номер канала
Command "FATR"
LnBufRow Длина буфера выборки данных
Node Имя ЛИНТЕР-сервера
PrzExe Режим обработки запроса

Буфер описания параметров VarBuf должен содержать информацию об интересующем столбце в следующем виде:

struct FATR_IN
  {
  L_LONG       Table;
  L_CHAR       ColName[MAX_ID_LEN];
      };

Примечания

  1. Значение Table можно получить при помощи команды FREL интерфейса нижнего уровня или выбрать из системной таблицы $$$SYSRL (при наличии права на SELECT-запросы к этой таблице).

  2. Если длина имени столбца меньше MAX_ID_LEN символов, то поле ColName должно быть дополнено справа пробелами до MAX_ID_LEN символов.

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

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

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

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

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

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

Информация в буфере выборки данных RowBuf будет представлена в следующем виде:

struct FATR_OUT
  {
  L_LONG       Table;
  L_WORD       Column;
  L_CHAR       ColName[MAX_ID_LEN];
#if _VER_MAX  >= 570
  L_BYTE       Desc[104];
#elif _VER_MAX  >= 500
  L_BYTE       Desc[96];
#else
  L_BYTE       Desc[64];
#endif
  };

Примечания

  1. Длина поля Desc в буфере выборки данных зависит от версии СУБД ЛИНТЕР. Значение макросу _VER_MAX присваивается в командной строке транслятора C/С++ (см. раздел «Условия применения»).

  2. Поле Desc является копией столбца $$$S24 из системной таблицы $$$ATTRI.

  3. Структура столбца $$$S24 описана в документе «СУБД ЛИНТЕР. Системные таблицы и представления», подраздел «$$$ATTRI».

Описание

По этой команде сначала просматривается очередь столбцов в оперативной памяти ядра СУБД для поиска описания указанного столбца. Если нужного столбца не найдено, поиск продолжается в системной таблице $$$ATTRI. В остальном данная команда подобна команде FREL.

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


L_LONG LinterFATR(TCBL * pCBL, FATR_IN * pIn, FATR_OUT * pOut)
  {
  memcpy(pCBL- >Command, "FATR", 4);
  pCBL- >LnBufRow = sizeof(FATR_OUT);
  pCBL- >PrzExe &= ~Q_ASYNC;
  inter(pCBL, pIn, NULL, NULL, pOut);
  return pCBL- >CodErr;
  }
Пример использования команды
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include "inter.h"
#include "exlib.h"


#ifndef WINCE
int    main()
#else
int    exfatr()
#endif
  {
  TCBL    CBLconnect;
  L_CHAR    Name_Pass[] = "SYSTEM/MANAGER8";
  L_CHAR    Node[] = "        ";
  L_WORD    Priority = 0;
  L_LONG  PrzExe = M_EXCLUSIVE | Q_ENCODE | M_BINARY;
  L_LONG  Err;
  L_LONG  ID;
  L_CHAR    User[] = "SYSTEM";
  L_CHAR    Table[] = "PERSON";
  L_CHAR    ColName[] = "NAME";
  FREL_IN FREL_In;
  FREL_OUT FREL_Out;
  FATR_IN FATR_In;
  FATR_OUT FATR_Out;

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

  Err = LinterFUSR(&CBLconnect, User, &ID);
  if (Err != NORMAL)
    PrintError(&CBLconnect);

  FREL_In.Owner = ID;
  memset(FREL_In.TblName, ' ', MAX_ID_LEN);
  strncpy(FREL_In.TblName, Table, strlen(Table));

  Err = LinterFREL(&CBLconnect, &FREL_In, &FREL_Out);
  if (Err != NORMAL)
    PrintError(&CBLconnect);

  FATR_In.Table = FREL_Out.Table;
  memset(FATR_In.ColName, ' ', MAX_ID_LEN);
  strncpy(FATR_In.ColName, ColName, strlen(ColName));

  Err = LinterFATR(&CBLconnect, &FATR_In, &FATR_Out);
  if (Err != NORMAL)
    PrintError(&CBLconnect);
  printf("FATR:\n");
  printf("\tTable=%ld\n\tColumn=%ld\n\tColName=%.18s\n",
         FATR_Out.Table,
         FATR_Out.Column,
         FATR_Out.ColName);

  printf("End Example\n");

  return 0;
  }