<Прикладная программа со встроенным SQL> (<embedded SQL host program>) является прикладной программой, состоящей из текста на языке программирования и текста на SQL. Текст на языке программирования должен удовлетворять требованиям конкретного стандартного языка программирования. Текст на SQL должен состоять из одного или более <встроенных операторов SQL> (<embedded SQL statement>) и, возможно, одной или более <секций объявления SQL> (<embedded SQL declare section>).
<Встроенный оператор SQL> (<embedded SQL statement>), <объявление начала встроенного SQL> (<embedded SQL begin declare>) или <объявление конца встроенного SQL> (<embedded SQL end declare>), содержащиеся в <программе на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>), должны содержать <терминатор SQL> (<SQL terminator>) END-EXEC. <Встроенный оператор SQL> (<embedded SQL statement>), <объявление начала встроенного SQL> (<embedded SQL begin declare>) или <объявление конца встроенного SQL> (<embedded SQL end declare>), содержащиеся в <программе на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>), не должны содержать <терминатор SQL> (<SQL terminator>). <Встроенный оператор SQL> (<embedded SQL statement>), <объявление начала встроенного SQL> (<embedded SQL begin declare>) или <объявление конца встроенного SQL> (<embedded SQL end declare>), содержащиеся в <программе на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>), должны содержать <терминатор SQL> (<SQL terminator>) - точку с запятой. В <программе на языке PASCAL со встроенным SQL> (<embedded SQL PASCAL program>) <объявление начала встроенного SQL> (<embedded SQL begin declare>) должно содержать <терминатор SQL> (<SQL terminator>) - точку с запятой; <объявление конца встроенного SQL> (<embedded SQL end declare>) или <встроенный оператор SQL> (<embedded SQL statement>), непосредственно следующие за <<объявлением начала встроенного SQL> (<embedded SQL begin declare>) или <встроенным оператором SQL> (<embedded SQL statement>), должны содержать <терминатор SQL> - точку с запятой; в остальных случаях <объявление конца встроенного SQL> (<embedded SQL end declare>) или <встроенный оператор SQL> (<embedded SQL statement>) не должны содержать <терминатор SQL>, а должны заканчиваться в соответствии с правилами для операторов языка Pascal.
<Префикс SQL> (<SQL prefix>), <объявление начала встроенного SQL> (<embedded SQL begin declare>) или <объявление конца встроенного SQL> (<embedded SQL end declare>) должны специфицироваться в одной строке, которая не содержит комментариев. В остальных случаях действуют правила продолжения строк и лексем с одной строки на другую и правила размещения комментариев, определенные в языке программирования, на котором написана <программа со встроенным SQL> (<embedded SQL host program>).
<Объявление курсора> (<declare cursor>), содержащееся в <программе со встроенным SQL> (<embedded SQL host program>, должно текстуально предшествовать в тексте этой <программы со встроенным SQL> (<embedded SQL host program> любому <оператору SQL> (<SQL statement>), который ссылается на <имя курсора> (<cursor name>) этого <объявления курсора> (<declare cursor>).
Любой <идентификатор основного языка> (<host identifier>), который появляется во <встроенном операторе SQL> (<embedded SQL statement>) <программы со встроенным SQL> (<embedded SQL host program>, должен быть явно объявлен в точности одном <определении переменной основного языка> (<host variable definition>), содержащемся в <программе со встроенным SQL> (<embedded SQL host program>. Это <определение переменной основного языка> (<host variable definition>) должно появляться в тексте <программы со встроенным SQL> (<embedded SQL host program> до любого <встроенного оператора SQL> (<embedded SQL statement>), ссылающегося на этот <идентификатор основного языка> (<host identifier>). <Определение переменной основного языка> (<host variable definition>) должно быть таким, чтобы ссылки на основе <идентификатора основного языка> (<host identifier>) были законными в каждом <встроенном операторе SQL> (<embedded SQL statement>), ссылающем этот <идентификатор основного языка> (<host identifier>).
<Определение переменной основного языка> (<host variable definition>) определяет тип данных основного языка этого <идентификатора основного языка> (<host identifier>). Для каждого такого типа данных основного языка программирования эквивалентный тип данных SQL специфицируется в Приложении С ,
"<Программа на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>)", Приложении D ,
"<Программа на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>)", Приложении E ,
"<Программа на языке Pascal со встроенным SQL> (<embedded SQL Pascal program>)" и Приложении F , "<Программа на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>)".
Для данной <программа со встроенным SQL> (<embedded SQL host program> H существует SQL <модуль> (<module>) M, который получается из Н по следующим правилам:
а) М содержит <раздел имени модуля> (<module name clause>) c определяемым реализацией или опускаемым <именем модуля> (<module name>).
b) М содержит <раздел языка> (<language clause>), которой специфицирует COBOL, FORTRAN, PASCAL или PL/1, и Н является соответственно <программой на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>), <программой на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>), <программой на языке Pascal со встроенным SQL> (<embedded SQL Pascal program>) или <программой на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>).
c) М содержит <раздел полномочий модуля> (<module authorization clause>), где <идентификатор полномочий модуля> (<module authorization identifier>) определяется реализацией.
d) Для каждого <объявления курсора> (<declare cursor>) EC, содержащегося в H, М содержит одно <объявление курсора> (<declare cursor>) PC и одну процедуру (<procedure>) PS, которая содержит <оператор открытия> (<open cursor>), ссылающийся на PC. <Имя процедуры> (<procedure name>) PS определяется реализацией. PC является копией EC, в которой каждое отдельное <имя встроенной переменной> (<embedded variable name>) замещено на определяемое реализацией <имя параметра> (<parameter name>). PS содержит <объявление параметра> (<parameter declaration>) для каждого <имени параметра> (<parameter name>), содержащегося в PC, и <объявление параметра> (<parameter declaration>) SQLCODE. Порядок <объявлений параметров> (<parameter declaration>) в PS определяется реализацией. <Объявление параметра> (<parameter declaration>), который соответствует данному отдельному <имени встроенной переменной> (<embedded variable name>) V, появляющейся в EC, специфицирует отдельное <имя параметра> (<parameter name>), которым заменялось V, <тип данных> (<data type>) SQL которого эквивалентен типу данных V в основном языке.
e) М содержит <процедуру> (<procedure>), соответствующую каждому <оператору SQL> (<SQL statement>), содержащемуся в H. <Процедура> (<procedure>) PS модуля М, соответствующая <оператору SQL> (<SQL statement>) ES из H, определяется следующим образом:
i) Если ES не является <оператором открытия> (<open statement>), то:
<Имя процедуры> (<procedure name>) PS определяется реализацией.
<Оператор SQL> (<SQL statement>) процедуры PS является копией ES, в которой каждое отдельное <имя встроенной переменной> (<embedded variable name>) согласованным образом заменено на отдельное <имя параметра> (<parameter name>), определяемое реализацией.
PS содержит <объявление параметра> (<parameter declaration>) для каждого отдельного определяемого реализацией <имени параметра> (<parameter name>), содержащегося в <операторе SQL> (<SQL statement>) PS, и <объявление параметра> (<parameter declaration>) SQLCODE. Порядок <объявлений параметров> (<parameter declaration>) определяется реализацией. <Объявление параметра> (<parameter declaration>), который соответствует данному отдельному <имени встроенной переменной> (<embedded variable name>) V, появляющейся в EC, специфицирует отдельное <имя параметра> (<parameter name>), на которое замещалось V, с <типом данных> (<data type>) SQL, эквивалентным типу данных V в основном языке.
Может ли одна <процедура>
(<procedure>) М соответствовать более чем одному <оператору
SQL> (<SQL statement>) из H - определяется реализацией.
ii) Если ES является <oператором открытия> (<open statement>), то:
Пусть ES обозначает <объявление курсора> (<declare cursor>) в H, на который ссылается ES.
PS - это <процедура>
(<procedure>) в модуле М, содержащая <оператор открытия>
(<open statement>), который ссылается на <объявление
курсора> в М, соответствующему ES.
Для заданной <программы со встроенным SQL> (<embedded SQL host program> H существует программа Р на основном языке, стандартным образом полученная из H по следующим правилам:
а) Все <объявления начала встроенного SQL> (<embedded SQL begin declare>) и <объявления конца встроенного SQL> <embedded SQL end declare> удалены.
b) Все <встроенные операторы SQL> (<embedded SQL statement>), содержащие <объявление курсора> (<declare cursor>) или <встроенное объявление исключительной ситуции> (<embedded exception declaration> , удалены.
c) Каждый <встроенный оператор SQL> (<embedded SQL statement>), содержащий <оператор SQL> (<SQL statement>), заменен на операторы основного языка, которые выполняют следующие действия:
i) Вызов средствами основного языка <процедуры> (<procedure>) <модуля> (<module>) М программы H, который соответствует <оператору SQL> (<SQL statement>). Если <оператор SQL> (<SQL statement>) не является <оператором открытия> (<open statement>), то аргументы вызова включают все различные <идентификаторы основного языка> (<host identifier>), содержащиеся в <операторе SQL> вместе с переменной SQL. Если <оператор SQL> (<SQL statement>) является <оператором открытия> (<open statement>), то аргументы вызова включают каждый различный <идентификатор основного языка> (<host identifier>), содержащийся в соответствующем <объявлении курсора> (<cursor declare>) в Н вместе с SQL переменной. Порядок аргументов в вызове соответствует порядку <объявления параметров> (<parameter declaration>) в соответствующей <процедуре> (<procedure>).
Замечание: В <программе на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>) "переменная SQLCODE" сокращается до "SQLCOD". См. Синтаксическое правило 6 Приложения D , "<Программа на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>)".
ii) Действия по исключительным ситуациям - в соответствии со спецификациями в Приложении B , "<Встроенное объявление исключительной ситуации> (<embedded exception declaration>).
Порождение программы Р и <модуля> (<module>) М из текста <программы со встроенным SQL> (<embedded SQL host program> Н фактически предшествует выполнению любых команд манипулирования текстом программы на основном языке, таких как включение или копирование текста.
Данная <программа со встроенным SQL> (<embedded SQL host program> Н с извлекаемым модулем М и извлекаемой программой Р определена так, как сказано выше:
а) Извлекаемый <модуль> (<module>) М программы Н должен быть стандартным <модулем> (<module>) SQL, как он специфицируется Форматами и Синтаксическими правилами данного стандарта.
b) Если программа Н является <программой на языке COBOL со
встроенным SQL> (<embedded SQL COBOL program>), то извлекаемая
программа Р должна соответствовать стандарту программы на языке COBOL. Если
программа Н является <программой на языке FORTRAN со встроенным SQL>
(<embedded SQL FORTRAN program>), то извлекаемая программа Р должна
соответствовать стандарту программы на языке FORTRAN. Если программа Н
является <программой на языке Pascal со встроенным SQL> (<embedded
SQL Pascal program>), то извлекаемая программа Р должна соответствовать
стандарту программой на языке Pascal. Если программа П является
<программой на языке PL/1 со встроенным SQL> (<embedded SQL PL/1
program>), то извлекаемая программа Р должна соответствовать стандарту
программы на ПЛ/1.
Общие правила
Интерпретация <программы со встроенным SQL>
(<embedded SQL host program>) H по определению эквивалентна
интерпретации извлекаемой программы P и извлекаемого <модуля>
(<module>) М из программы Н.