Синтаксические правила
Директивы прекомпилятора предназначены для выделения в исходной C/C++ программе предложений, относящихся непосредственно к встроенному SQL. Прекомпилятор встроенного SQL распознает и обрабатывает только выделенные директивами строки (блоки), не затрагивая остальной текст программы.
Для программы со встроенным SQL установлены следующие общие синтаксические правила:
-
допускается произвольно смешивать в исходном тексте строки синтаксически полных (законченных) конструкций встроенных SQL-предложений и операторов языка C/C++;
-
нельзя в одной строке размещать одновременно предложение встроенного SQL и оператор C/C++;
-
предложения встроенного SQL записываются в тексте программы в свободном формате, т.е. их текст можно переносить на следующие строки, разделяя отдельные элементы синтаксической конструкции, за исключением префикса, т.е. конструкция EXEC /n SQL не распознается как префикс предложения встроенного SQL;
-
именование переменных встроенного SQL должно соответствовать правилам языка C/C++;
-
в предложения встроенного SQL допускается включать комментарии в формате языка C/C++ (/* ... */) в те места, где разрешены пробелы (кроме ключевых префиксов EXEC SQL, EXEC LINTER), например:
EXEC SQL SELECT ENAME, SAL INTO :emp_name, :salary /* выходные главные переменные */ FROM EMP WHERE DEPTNO = :dept_number;
-
ключевые слова встроенного SQL-предложения являются регистронезависимыми, т.е. допускается использование нижнего и/или верхнего регистра. Например, указанные ниже SQL-предложения с точки зрения прекомпилятора являются идентичными:
EXEC SQL DECLARE BEGIN; Exec sql declare begin; Exec SQL Declare Begin;
Отличие ограничителей (одинарных и двойных кавычек) прекомпилятора встроенного SQL и компилятора C/C++ приведено в таблице 1.
Ограничитель | Использование в компиляторе C/C++ | Использование в прекомпиляторе встроенного SQL |
---|---|---|
' ' (одинарные кавычки) | Символьный литерал (см. пример 1) | Представление строкового литерала (см. пример 2) |
" " (двойные кавычки) | Представление строкового литерала (см. пример 3) | Представление строкового литерала (см. пример 2) и представление в SQL-предложениях идентификаторов объектов БД, содержащих малые английские буквы или большие/малые русские буквы (см. пример 4) |
Примеры, показывающие семантические различия одинарных и двойных кавычек:
1) Символьный литерал в C/C++
ch = getchar(); switch (ch) { case 'U': update(); break; case 'I': insert(); break; ...
2) Именование объектов БД в SQL-предложении и представление строковых литералов
EXEC SQL SELECT ENAME, SAL FROM EMP WHERE JOB = 'MANAGER'; EXEC SQL DECLARE ; NAME char[50]; EXEC SQL END DECLARE ; NAME="Банк 'Менатеп'"
3) Представление строковых литералов
printf("\nПлатежное поручение");
4) Именование объектов БД и их элементов
EXEC SQL CREATE TABLE "Банк_документы" ("название" varchar(50), ...);