<Прикладная программа со
встроенным 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>) М из программы Н.
Знаете ли Вы, что релятивистское объяснение феномену CMB (космическому микроволновому излучению) придумал человек выдающейся фантазии Иосиф Шкловский (помните книжку миллионного тиража "Вселенная, жизнь, разум"?). Он выдвинул совершенно абсурдную идею, заключавшуюся в том, что это есть "реликтовое" излучение, оставшееся после "Большого Взрыва", то есть от момента "рождения" Вселенной. Хотя из простой логики следует, что Вселенная есть всё, а значит, у нее нет ни начала, ни конца... Подробнее читайте в FAQ по эфирной физике.