Пример Embedded SQL
Следующий код — это простая внедренная программа SQL, написанная на языке C. Программа иллюстрирует множество встроенных методов SQL, но не все. Программа запрашивает у пользователя номер заказа, получает номер клиента, продавец и состояние заказа, а также отображает полученные сведения на экране.
int main() {
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
int OrderID; /* Employee ID (from user) */
int CustID; /* Retrieved customer ID */
char SalesPerson[10] /* Retrieved salesperson name */
char Status[6] /* Retrieved order status */
EXEC SQL END DECLARE SECTION;
/* Set up error processing */
EXEC SQL WHENEVER SQLERROR GOTO query_error;
EXEC SQL WHENEVER NOT FOUND GOTO bad_number;
/* Prompt the user for order number */
printf ("Enter order number: ");
scanf_s("%d", &OrderID);
/* Execute the SQL query */
EXEC SQL SELECT CustID, SalesPerson, Status
FROM Orders
WHERE OrderID = :OrderID
INTO :CustID, :SalesPerson, :Status;
/* Display the results */
printf ("Customer number: %d\n", CustID);
printf ("Salesperson: %s\n", SalesPerson);
printf ("Status: %s\n", Status);
exit();
query_error:
printf ("SQL error: %ld\n", sqlca->sqlcode);
exit();
bad_number:
printf ("Invalid order number.\n");
exit();
}
Обратите внимание на следующее:
Переменные узла объявляются в разделе, заключенном ключевыми словами BEGIN DECLARE SECTION и END DECLARE SECTION . Каждое имя переменной узла префиксируется двоеточием (:) при отображении в внедренной инструкции SQL. Двоеточие позволяет прекомпилатору различать переменные узла и объекты базы данных, такие как таблицы и столбцы, имеющие то же имя.
Типы данных: типы данных, поддерживаемые СУБД и языком узла, могут отличаться. Это влияет на переменные узла, так как они играют двойную роль. С одной стороны, переменные узла — это программные переменные, объявленные и управляемые операторами языка узла. С другой стороны, они используются в внедренных инструкциях SQL для получения данных базы данных. Если нет типа языка узла, соответствующего типу данных СУБД, СУБД автоматически преобразует данные. Тем не менее, так как каждая СУБД имеет собственные правила и идиосинхрасы, связанные с процессом преобразования, типы переменных узла должны быть тщательно выбраны.
Обработка ошибок субД сообщает об ошибках во время выполнения программы приложений через область связи SQL или SQLCA. В предыдущем примере кода первая внедренная инструкция SQL — INCLUDE SQLCA. Это сообщает предварительной компиляции, чтобы включить структуру SQLCA в программу. Это необходимо, когда программа будет обрабатывать ошибки, возвращаемые СУБД. ВСЯКИй раз... Оператор GOTO сообщает прекомпилатору, чтобы создать код обработки ошибок, который ветвляется в определенную метку при возникновении ошибки.
Оператор Singleton SELECT, используемый для возврата данных, является однойтонной инструкцией SELECT ; то есть возвращает только одну строку данных. Поэтому пример кода не объявляет или не использует курсоры.