Дать описание столбца таблицы
Назначение
Команда
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; }