Приложения
Приложение А. <Программа со встроенным SQL> (<embedded SQL host program>)
(Это дополнение не является неотъемлемой частью стандарта.)
Функция
Специфицирует прикладную программу со встроенным языком
SQL.
Формат
<embedded SQL host program> ::=
<embedded SQL COBOL program>
| <embedded SQL FORTRAN program>
| <embedded SQL Pascal program>
| <embedded SQL PL/1 program>
<embedded SQL statement> ::=
<SQL prefix>
{ <declare cursor>
| <embedded exception declaration>
| <SQL statement>}
[<SQL terminator>]
<SQL prefix> ::=
EXEC SQL
<SQL terminator> ::=
END EXEC | ;
<embedded SQL declare section> ::=
<embedded SQL begin declare>
[<host variable definition>...]
<embedded SQL end declare>
<embedded SQL begin declare> ::=
<SQL prefix> BEGIN DECLARE SECTION
[<SQL terminator>]
<embedded SQL end declare> ::=
<SQL prefix> END DECLARE SECTION
[<SQL terminator>]
<host variable definition> ::=
< COBOL variable definition>
| < FORTRAN variable definition>
| <Pascal variable definition>
| <PL/1 variable definition>
<embedded variable name> ::=
:<host identifier>
<host identifier> ::=
< COBOL host identifier>
| < FORTRAN host identifier>
| <Pascal host identifier>
| <PL/1 host identifier>
Синтаксические правила
- <Прикладная программа со встроенным 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>) М из программы Н.
Назад | Содержание | Вперед