Синтаксические правила

Директивы прекомпилятора предназначены для выделения в исходной 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.

Таблица 1. Отличие ограничителей прекомпилятора встроенного SQL и компилятора языка C/C++
ОграничительИспользование в компиляторе 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), ...);