Дать описание столбца таблицы
Назначение
Команда
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];
};
Примечания
-
Значение
Tableможно получить при помощи командыFRELинтерфейса нижнего уровня или выбрать из системной таблицы$$$SYSRL(при наличии права на SELECT-запросы к этой таблице). -
Если длина имени столбца меньше 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
};
Примечания
-
Длина поля
Descв буфере выборки данных зависит от версии СУБД ЛИНТЕР. Значение макросу _VER_MAX присваивается в командной строке транслятора C/С++ (раздел «Условия применения»). -
Поле
Descявляется копией столбца$$$S24из системной таблицы$$$ATTRI. -
Структура столбца
$$$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;
}