Приложение 4. Пример PCI-программы
/* Пример программы для СУБД ЛИНТЕР, написанной с помощью прекомпиляторного интерфейса */
#include <stdio.h>
#include <string.h>
/* Определение коммуникационной области – обязательно для встроенного языка SQL */
EXEC LINTER IFDEF SQL;
EXEC SQL INCLUDE SQLCA;
EXEC LINTER ENDIF;
/* Секция объявлений прекомпилятора */
EXEC SQL BEGIN DECLARE SECTION;
char cName [21];
char cFirstNam [16];
char cCity [16];
char cPhone [9 ];
char *pName, *Query, *User;
EXEC SQL END DECLARE SECTION;
void main()
{
/* 1. Установить связь с СУБД ЛИНТЕР */
EXEC SQL WHENEVER SQLERROR GOTO err_open;
User = "SYSTEM/MANAGER8";
EXEC SQL CONNECT :User;
/* 2. Подготовить предложение к выполнению */
Query = "SELECT NAME,FIRSTNAM,CITY,PHONE FROM PERSON WHERE NAME=:v1;";
pName = "CLINTON";
EXEC SQL PREPARE ST FROM :Query;
EXEC SQL DECLARE CR CURSOR_PCI FOR ST;
/* 3. Открыть курсор */
EXEC SQL WHENEVER SQLERROR GOTO err_read;
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL OPEN CR USING :pName;
/* 4. Выбирать, пока есть записи */
EXEC SQL WHENEVER NOT FOUND GOTO no_more;
for (;;) {
EXEC SQL FETCH CR INTO :cName, :cFirstNam, :cCity,
:cPhone;
printf(" %20s %15s %15s %8s\n", cName, cFirstNam,
cCity, cPhone);
}
not_found: printf(" Нет таких записей\n");
no_more: /* 5. Закрыть курсор */
EXEC SQL CLOSE CR;
exit: /* 6. Закрыть связь с СУБД ЛИНТЕР */
EXEC SQL WHENEVER SQLERROR GOTO err_clos;
EXEC SQL COMMIT RELEASE;
return;
err_open: printf(" Ошибка открытия канала : %d\n",
ErrPCI_); return;
err_clos: printf(" Ошибка закрытия канала : %d\n",
ErrPCI_); return;
err_read: printf(" Ошибка обращения к ядру: %d\n",
ErrPCI_); goto exit;
}