Для каждого <определения
курсора> (<cursor declare>) в
<модуле> (<module>) должна
существовать ровно одна
<процедура> (<procedure>) в
этом <модуле> (<module>),
которая содержит <оператор
открытия> (<open statement>) со
спецификацией <имени
курсора> (<cursor name>),
объявленного в <объявлении
курсора> (<cursor declare>).
<Модуль> (<module>) должен
быть ассоциирован с прикладной
программой при ее выполнения.
Прикладная программа должна
быть ассоциирована не более
чем с одним <модулем>
(<module>).
Общие правила
Если <раздел языка> (<language
clause>) <модуля> (<module>)
специфицирует COBOL
(соответственно FORTRAN, PASCAL, PLI) и
если агент, выполняющий вызов
<процедуры> (<procedure>) этого
<модуля> (<module>), не
является стандартной
программой на языке COBOL
(соответственно FORTRAN, Pascal, PL/1),
то результат неопределен.
После выполнения агентом на
языке программирования
последнего вызова
<процедуры> (<procedure>) в
<модуле> (<module>) неявно
выполняется <оператор
фиксации> (<commit statement>) или
<оператор отката> (<rollback
statement>). Выбор одного из этих
<операторов SQL> (<SQL statement>)
определяется реализацией. Если
имеет место
невосстанавлваемая ошибка, то
СУБД должна выполнить
<оператор отката> (<rollback
statement>).
7.2. <Раздел имени модуля> (<module
name clause>)
Функция
Задает имя <модуля> (<module>).
Формат
<module name clause> ::=
MODULE [<module name>]
Синтаксические правила
<Имя модуля> (<module name>)
должно отличаться от <имени
модуля> (<module name>) любого
другого <модуля> (<module>) в
том же окружении. Понятие
окружения определяется в
реализации.
Общие правила
<Раздел имени модуля> (<module
name clause>) определяет
необязательный
<идентификатор> (<identifier>)
как <имя модуля> (<module name>),
определяющее содержащий
<модуль> (<module>) в данном
окружении.
<Имя процедуры> (<procedure
name>) должно отличаться от
<имени процедуры> (<procedure
name>) любой другой
<процедуры> (<procedure>) в
содержащем модуле.
<Имя параметра> <parameter name>
в каждом <объявлении
параметра> (<parameter declaration>) в
<процедуре> (<procedure>)
должно отличаться от <имени
параметра> (<parameter name>)
любого другого <объявления
параметра> (<parameter declaration>) в
этой процедуры.
Любое <имя параметра>
(<parameter name>), содержащееся в
<операторе SQL> (<SQL statement>)
<процедуры> (<procedure>),
должно быть специфицировано в
<объявлении параметра>
(<parameter declaration>) этой
процедуры.
Если <имя столбца> (<column
name>) в <операторе SQL> (<SQL
statement>) совпадает с <именем
параметра> (<parameter name>) в
<объявлении параметра>
(<parameter declaration>)
<процедуры> (<procedure>),
содержащей этот <оператор
SQL> (<SQL statement>), то
<спецификация столбца>
(<column specification>), которая
содержит это <имя столбца>
(<column name>), должна содержать
<квалификатор> (<qualifier>).
Законный вызов <процедуры>
(<procedure>) должен поставлять n
параметров, где n - число
<объявлений параметров>
(<parameter declaration>) в данной
<процедуре> (<procedure>).
Процедура должна содержать
ровно один <параметр SQLCODE>
(<SQLCODE parameter>). На параметр,
соответствующий параметру
SQLCODE, ссыля4аются я0как я4на
параметр SQLCODE.
a) Если <раздел языка> (<language
clause>) специфицирует COBOL, то:
i) Типом параметра SQLCODE
должен быть COMPUTATIONAL S9(PC),
где PC - определяемая
реализацией точность,
большая или равная 4.
ii) Любой <тип данных>
(<data type>) в <объявлении
параметров> (<parameter
declaration>) должен быть CHARACTER
или NUMERIC.
iii) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
<тип данных> (<data type>)
CHARACTER(L) c некоторой
<длиной> (<lenght>) L, то
тип i-ого параметра должен
быть буквенно-цифровым
типом языка COBOL длины L.
iv) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
<тип данных> (<data type>)
NUMERIC(P,S) c некоторыми
<точностью> (<precision>) P
и <масштабом> (<scale>) S,
то типом i-ого параметра
должен быть тип языка COBOL
usage DISPLAY SIGN LEADING SEPARATE со
следующим PICTURE:
Если S=P, то PICTURE:
"S", за которым
следует "V", и
затем P экземпляров
"9".
Если P > S > 0, то PICTURE:
"S", за которым
следуют P-S экземпляров
"9", затем "V"
и затем S экземпляров
"9".
Если S=O, то PICTURE:
"S", за которым
следуют P экземпляров
"9" и затем
необязательное
"V".
b) Если <раздел языка> (<language
clause>) специфицирует FORTRAN, то:
i) Тип параметра SQLCODE должен
быть типом INTEGER языка FORTRAN.
ii) Любой <тип данных>
(<data type>) в <объявлении
параметра> должен быть
CHARACTER, INTEGER, REAL или DOUBLE PRECISION.
iii) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
<тип данных> (<data type>)
CHARACTER(L) с некоторой
<длиной> (<lenght>) L, то
тип i-ого параметра должен
быть типом CHARACTER языка FORTRAN
с длиной L.
vi) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
<тип данных> (<data type>)
данных INTEGER, REAL или DOUBLE
PRECISION, то тип i-ого
параметра должен быть
соответственно INTEGER, REAL или
DOUBLE PRECISION языка FORTRAN.
c) Если <раздел языка> (<language
clause>) специфицирует PASCAL, то:
i) Тип параметра SQLCODE должен
быть типом INTEGER языка Pascal.
ii) Любой <тип данных>
(<data type>) в <объявлении
параметра> (<parameter
declaration>) должен быть CHARACTER,
INTEGER, или REAL.
iii) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
<тип данных> (<data type>)
CHARACTER(L) с некоторой
<длиной> (<lenght>) L, то
тип i-ого параметра должен
быть типом строки языка
Pascal длины L.
iv) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
<тип данных> (<data type>)
INTEGER или REAL, то тип i-ого
параметра должен быть
соответственно типом INTEGER,
или REAL языка Pascal.
d) Если <раздел языка> (<language
clause>) специфицирует PL1, то:
i) Тип параметра SQLCODE должен
быть FIXED BINARY(PP), где РР
определяемая реализацией
точность, большая или
равная 15.
ii) Любой <тип данных>
(<data type>) в <объявлении
параметра> (<parameter
declaration>) должен быть CHARACTER,
DECIMAL, или FLOAT.
iii) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
тип данных CHARACTER(L) с
некоторой <длиной>
(<lenght>) L, то тип i-ого
параметра должен быть
типом CHARACTER языка PL/1 с
длиной L.
vi) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
тип данных DECIMAL(P,S) с
некоторыми <точностью>
(<precision>) P и
<масштабом> (<scale>) S,
то тип i-ого параметра
должен быть типом FIXED REAL
DECIMAL(P,S) языка PL/1.
v) Если i-ое <объявление
параметра> (<parameter
declaration>) специфицирует
тип данных FLOAT(P) с
некоторой <точностью>
(<precision>) P, то тип i-ого
параметра должнен быть
типом FLOAT REAL BINARY (P) языка PL/1.
Общие правила
<Процедура> (<procedure>)
определяет процедуру, которая
может вызываться определяемым
реализацией агентом.
Когда процедура вызывается
агентом языка
программирования:
а) Если для этого агента нет
активной транзакции, то
транзакция фактически
инициируется и связывается с
этим вызовом и с последующими
вызовами этим агентом любой
<процедуры> (<procedure>) в
содержащем <модуле>
(<module>), до тех пор, пока
данный агент не закончит эту
транзакцию.
b) Выполняется <оператор SQL>
(<SQL statement>) S данной
<процедуры> (<procedure>).
а) Если S выполнен успешно, то
i) Если S - <оператор
чтения> (<fetch statement>) ,
для которого следующая
строка не существует, то в
параметр SQLCODE
устанавливается значение
100.
ii) Если S - <оператор
вставки> (<insert statement>),
для которого не нашлось ни
одной возможной строки, то
в параметр SQLCODE
устанавливается значение
100.
iii) Если S - <оператор
выборки> (<select statement>),
результатом которого
явилась пустая таблица, то
в параметр SQLCODE
устанавливается значение
100.
iv) Если S - <оператор
модификации: поисковый>
(<update statement: searched>) или
<оператор удаления:
поисковый>) (<delete statement:
searched>) с поиском, для
которых не нашлись
объектные строки для
модификации или удаления,
то в параметр SQLCODE
устанавливается значение
100.
v) Во всех остальных
случаях в параметр SQLCODE
устанавливается 0.
b) Если S выполнен неуспешно, то
i) Все изменения,
произведенные над базой
данных при выполнении S,
аннулируются.
ii) В параметр SQLCODE
устанавливается
отрицательное число со
значением, определяемым
реализацией.
Знаете ли Вы, что в 1965 году два американца Пензиас (эмигрант из Германии) и Вильсон заявили, что они открыли излучение космоса. Через несколько лет им дали Нобелевскую премию, как-будто никто не знал работ Э. Регенера, измерившего температуру космического пространства с помощью запуска болометра в стратосферу в 1933 г.? Подробнее читайте в FAQ по эфирной физике.