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