Приложение 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;
}