Приложения

Приложение А. <Программа со встроенным 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>

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

  1. <Прикладная программа со встроенным SQL> (<embedded SQL host program>) является прикладной программой, состоящей из текста на языке программирования и текста на SQL. Текст на языке программирования должен удовлетворять требованиям конкретного стандартного языка программирования. Текст на SQL должен состоять из одного или более <встроенных операторов SQL> (<embedded SQL statement>) и, возможно, одной или более <секций объявления SQL> (<embedded SQL declare section>).
  2. <Встроенный оператор 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.
  3. <Префикс SQL> (<SQL prefix>), <объявление начала встроенного SQL> (<embedded SQL begin declare>) или <объявление конца встроенного SQL> (<embedded SQL end declare>) должны специфицироваться в одной строке, которая не содержит комментариев. В остальных случаях действуют правила продолжения строк и лексем с одной строки на другую и правила размещения комментариев, определенные в языке программирования, на котором написана <программа со встроенным SQL> (<embedded SQL host program>).
  4. <Объявление курсора> (<declare cursor>), содержащееся в <программе со встроенным SQL> (<embedded SQL host program>, должно текстуально предшествовать в тексте этой <программы со встроенным SQL> (<embedded SQL host program> любому <оператору SQL> (<SQL statement>), который ссылается на <имя курсора> (<cursor name>) этого <объявления курсора> (<declare cursor>).
  5. Любой <идентификатор основного языка> (<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>).
  6. <Определение переменной основного языка> (<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>)".
  7. Для данной <программа со встроенным 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>), то:
      1. <Имя процедуры> (<procedure name>) PS определяется реализацией.
      2. <Оператор SQL> (<SQL statement>) процедуры PS является копией ES, в которой каждое отдельное <имя встроенной переменной> (<embedded variable name>) согласованным образом заменено на отдельное <имя параметра> (<parameter name>), определяемое реализацией.
      3. 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 в основном языке.
      4. Может ли одна <процедура> (<procedure>) М соответствовать более чем одному <оператору SQL> (<SQL statement>) из H - определяется реализацией.

      ii) Если ES является <oператором открытия> (<open statement>), то:
      1. Пусть ES обозначает <объявление курсора> (<declare cursor>) в H, на который ссылается ES.
      2. PS - это <процедура> (<procedure>) в модуле М, содержащая <оператор открытия> (<open statement>), который ссылается на <объявление курсора> в М, соответствующему ES.
  8. Для заданной <программы со встроенным 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>).
  9. Порождение программы Р и <модуля> (<module>) М из текста <программы со встроенным SQL> (<embedded SQL host program> Н фактически предшествует выполнению любых команд манипулирования текстом программы на основном языке, таких как включение или копирование текста.
  10. Данная <программа со встроенным 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.

Общие правила

  1. Интерпретация <программы со встроенным SQL> (<embedded SQL host program>) H по определению эквивалентна интерпретации извлекаемой программы P и извлекаемого <модуля> (<module>) М из программы Н.

Назад | Содержание | Вперед


Copyright © CIT