Бесплатные рефераты
Інформатика, програмування
Мова
модулів SQL
7.1 <Модуль> (
)
Функція b> p>
Визначає модуль. p>
Формат b> p>
:: = [ ...] ... :: = LANGUAGE (COBOL | FORTRAN | PASCAL | PLI) :: = AUTHORIZATION :: =
Синтаксичні правила b> p>
Для кожного <визначення курсору> () в
<модулі> () повинна існувати рівно один
<процедура> () в цьому <модулі>
(), яка містить <оператор відкриття> () зі специфікацією <імені курсору> (), оголошеного в <оголошенні курсору> ().
<Модуль> () повинен бути асоційований з
прикладної програмою за її виконання. Прикладна програма повинна бути
асоційована не більше ніж з одним <модулем> ().
Загальні правила b> p>
Якщо <розділ мови> () <модуля>
() специфікує COBOL (відповідно FORTRAN, PASCAL, PLI)
і якщо агент, що виконує виклик <процедури> ()
цього <модуля> (), не є стандартною програмою
мовою COBOL (відповідно FORTRAN, Pascal, PL/1), то результат
невизначений.
Після виконання агентом на мові програмування останнього
дзвінка <процедури> () в <модулі>
() неявно виконується <оператор фіксації> () або <оператор відкату> ().
Вибір одного з цих <операторів SQL> () визначається
реалізацією. Якщо має місце невосстанавлваемая помилка, то СУБД має
виконати <оператор відкату> ().
7.2. <Розділ імені модуля> ()
Функція b> p>
Визначає ім'я <модуля> (). p>
Формат b> p>
:: = MODULE []
Синтаксичні правила b> p>
<ім'я модуля> () повинно відрізнятися від
<ім'я модуля> () будь-якого іншого <модуля>
() у тому ж оточенні. Поняття оточення визначається в
реалізації.
Загальні правила b> p>
<Розділ імені модуля> ()
визначає необов'язковий <ідентифікатор> () як
<ім'я модуля> (), що визначає містить
<модуль> () в даному оточенні.
7.3. <Процедура> ()
Функція b> p>
Визначає процедуру і оператор мови SQL. p>
Формат b> p>
:: = PROCEDURE ...; ; :: = | :: = SQLCODE :: = | | | | | | | | | |
Синтаксичні правила b> p>
<Ім'я процедури> () повинно відрізнятися
від "імені процедури> () будь-який інший
<процедури> () в містить модулі.
<Ім'я параметра> в кожному
<оголошенні параметра> () в
<процедурі> () має відрізнятися від "імені
параметра> () будь-якого іншого <оголошення
параметра> () в цієї процедури.
Будь-яка <ім'я параметра> (), що міститься
в <оператора SQL> () <процедури>
(), має бути специфікована в <оголошенні
параметра> () цієї процедури.
Якщо <ім'я стовпця> () в <операторі
SQL> () збігається з <іменем параметра>
() в <оголошенні параметра> () <процедури> (), що містить цей
<оператор SQL> (), то <специфікація
стовпця> (), яка містить це <ім'я
стовпця> (), повинна містити <кваліфікаторов>
().
Законний виклик <процедури> () повинен
поставляти n параметрів, де n - число <оголошень параметрів>
() в даній <процедурі>
().
Процедура має містити рівно один <параметр SQLCODE>
(). На параметр, який відповідає параметру
SQLCODE, ссиля4аются я0как я4на параметр SQLCODE.
<Розділом мови> () процедури
є "розділ мови> () містить
<модуля> ().
a) Якщо <розділ мови> () специфікує
COBOL, то:
i) Типом параметра SQLCODE повинен бути COMPUTATIONAL S9 (PC), де PC --
обумовлена реалізацією точність, більша або рівна 4.
ii) Будь-який <тип даних> () в <оголошенні
параметрів> () повинен бути CHARACTER або
NUMERIC.
iii) Якщо i-е <оголошення параметра> () специфікує <тип даних> ()
CHARACTER (L) c деякої <довжиною> () L, то тип i-ого
параметра повинен бути буквено-цифровим типом мови COBOL довжини L.
iv) Якщо i-е <оголошення параметра> () специфікує <тип даних> ()
NUMERIC (P, S) c деякими <точністю> () P і
<масштабом> () S, то типом i-ого параметра повинен бути
тип мови COBOL usage DISPLAY SIGN LEADING SEPARATE з наступним PICTURE:
Якщо S = P, то PICTURE: "S", за яким
слід "V", і потім P екземплярів "9".
Якщо P> S> 0, то PICTURE:
"S", за яким слідують PS екземплярів "9", потім
"V" і потім S екземплярів "9".
Якщо S = O, то PICTURE: "S", за яким
слідують P екземплярів "9" і потім необов'язкове
"V".
b) Якщо <розділ мови> () специфікує FORTRAN,
то: p>
i) Тип параметра SQLCODE повинен бути типом INTEGER мови FORTRAN.
ii) Будь-який <тип даних> () в <оголошенні
параметра> повинен бути CHARACTER, INTEGER, REAL або DOUBLE PRECISION.
iii) Якщо i-е <оголошення параметра> () специфікує <тип даних> ()
CHARACTER (L) з деякою <довжиною> () L, то тип i-ого
параметра повинен бути типом CHARACTER мови FORTRAN з довжиною L.
vi) Якщо i-е <оголошення параметра> () специфікує <тип даних> ()
даних INTEGER, REAL або DOUBLE PRECISION, то тип i-ого параметра повинен
бути відповідно INTEGER, REAL або DOUBLE PRECISION мови FORTRAN.
c) Якщо <розділ мови> () специфікує PASCAL,
то: p>
i) Тип параметра SQLCODE повинен бути типом INTEGER мови Pascal.
ii) Будь-який <тип даних> () в <оголошенні параметра>
() повинен бути CHARACTER, INTEGER, або REAL.
iii) Якщо i-е <оголошення параметра> () специфікує <тип даних> ()
CHARACTER (L) з деякою <довжиною> () L, то тип i-ого
параметра повинен бути типом рядка мови Pascal довжини L.
iv) Якщо i-е <оголошення параметра> () специфікує <тип даних> ()
INTEGER або REAL, то тип i-ого параметра повинен бути відповідно типом
INTEGER, або REAL мови Pascal.
d) Якщо <розділ мови> () специфікує PL1, то: p>
i) Тип параметра SQLCODE повинен бути FIXED BINARY (PP), де РР
обумовлена реалізацією точність, більша або дорівнює 15.
ii) Будь-який <тип даних> () в <оголошенні
параметра> () повинен бути CHARACTER,
DECIMAL, або FLOAT.
iii) Якщо i-е <оголошення параметра> () специфікує тип даних CHARACTER (L) з деякою
<довжиною> () L, то тип i-ого параметра повинен бути
типом CHARACTER мови PL/1 з довжиною L.
vi) Якщо i-е <оголошення параметра> () специфікує тип даних DECIMAL (P, S) з деякими
<точністю> () P і <масштабом>
() S, то тип i-ого параметра повинен бути типом FIXED REAL
DECIMAL (P, S) мови PL/1.
v) Якщо i-е <оголошення параметра> ()
специфікує тип даних FLOAT (P) з деякою <точністю>
() P, то тип i-ого параметри повинні бути типом FLOAT
REAL BINARY (P) мови PL/1.
Загальні правила b> p>
<Процедура> () визначає процедуру,
яка може викликатися визначаються реалізацією агентом.
Коли процедура викликається агентом мови програмування:
а) Якщо для цього агента немає активної транзакції, то транзакція фактично
ініціюється і зв'язується з цим викликом і з наступними викликами цим
агентом будь-який <процедури> () в містить
<модулі> (), до тих пір, поки цей агент не закінчить
цю транзакцію.
b) Виконується <оператор SQL> () S даної
<процедури> ().
а) Якщо S виконано успішно, то
i) Якщо S - <оператор читання> (), для
якого наступний рядок не існує, то в параметр SQLCODE
встановлюється значення 100.
ii) Якщо S - <оператор вставки> (), для
якого не знайшлося жодної можливої рядка, то в параметр SQLCODE
встановлюється значення 100.
iii) Якщо S - <оператор вибірки> (),
результатом якого стала порожню таблицю, то в параметр SQLCODE встановлюється
значення 100.
iv) Якщо S - <оператор модифікації: пошуковий> () або <оператор видалення: пошуковий>)
() з пошуком, для яких не знайшлися
об'єктні рядка для модифікації або видалення, то в параметр SQLCODE
встановлюється значення 100.
v) У всіх інших випадках у параметр SQLCODE встановлюється 0.
b) Якщо S виконаний неуспішне, то p>
i) Всі зміни, виконані над базою даних при виконанні S,
анулюються.
ii) У параметр SQLCODE встановлюється негативне число зі значенням,
визначаються реалізацією
Мова маніпулювання даними (data
manipulation language)
8.1 <Оператор закриття> ()
Функція b> p>
Закрити курсор. p>
Формат b> p>
:: = CLOSE
Синтаксичні правила b> p>
Осяжний модуль повинен містити оголошення курсору, в якому
використовується це ж ім'я курсору.
Загальні правила b> p>
Курсор повинен бути у відкритому стані.
Курсор переводиться в закритий стан і руйнується копія
<специфікації курсору> ().
8.2. <Оператор фіксації> ()
Функція b> p>
Закінчує поточну транзакцію з фіксацією. p>
Формат b> p>
:: = COMMIT WORK Синтаксичні правила b> p>
Ні. p>
Загальні правила b> p>
Поточна транзакція завершується.
Закриваються будь-які курсори, відкриті даної транзакцією.
Будь-які зміни бази даних, зроблені в поточній транзакції,
фіксуються.
8.3. <Оголошення курсору> ()
Функція b> p>
Визначає курсор. p>
Формат b> p>
:: = DECLARE CURSOR FOR :: = [ ...] :: = | UNION [ALL] :: = | () :: = ORDER BY [(, }...] :: = ( | ) [ASC | DESC]
Синтаксичні правила b> p>
<Ім'я курсору> () не повинно бути
ідентичним будь-якого іншого <імені курсору> (),
спеціфіціруемого в будь-якому іншому <оголошенні курсору>
() того самого модуля.
Будь-яка <ім'я параметра> (), що міститься
в <специфікації курсору> (), повинно бути
визначено в <оголошенні параметра> ()
<процедури> () осяжний <модуля>
(), який містить <оператор відкриття> (), специфікує це <ім'я курсору> ().
Зауваження: Cм. Синтаксичних правил 7.1, "<модуль>
() ".
Нехай Т позначає таблицю, специфіковані в <специфікації
курсору> ().
a) Якщо вказано ORDER BY, то Т є тільки читається таблицею зі
специфіковані порядком сортування.
b) Якщо не вказано ні ORDER BY ні UNION і <специфікація запиту>
() є з мене (updatable), то Т --
змінна таблиця.
c) Інакше Т - тільки що читається таблиця.
a) Якщо не вказано UNION, то описом Т є опис
<специфікації запиту> ().
b) Якщо вказано UNION, то нехай для кожного специфікованого UNION Т1 і
Т2 позначають таблиці, які специфікована в <виразі запиту>
() і <Терме запит> ().
<Список вибірки> () у специфікаціях Т1 і Т2
повинен складатися з "*" або <специфікацій стовпців>
(). Крім імен стовпчиків, описи Т1 і Т2
повинні бути ідентичними. Всі стовпці результату неіменовани. За
винятком <імен стовпців> (), опис
результату таке ж, як опис Т1 і Т2.
Якщо вказано ORDER BY, то кожна <специфікація сортування>
() в <розділі order by> () повинна ідентифікувати стовпець таблиці Т.
a) Якщо <специфікація сортування> ()
містить <специфікацію стовпців> (), то
<специфікація сортування> ()
ідентифікує стовпець Т з ім'ям, зазначених у цій <специфікації
стовпця> ().
b) Якщо <специфікація сортування> ()
містить <ціле без знаку> (), то це ціле
повинно бути більше нуля і не більше ступеня таблиці T. <Специфікація
сортування> () вказує стовпець Т з порядкової
(ordinal) позицією, спеціфіціруемой цим <цілим без знаку>
().
Загальні правила b> p>
a) Якщо Т змінна (updatable) таблиця, то курсор асоціюється з
іменованої таблицею, ідентифікованої <ім'ям таблиці> () з <розділу from> (). Нехай У позначає
іменовану цю таблицю. Для кожного рядка в Т існує відповідна
рядок у В, з якої отримано рядок таблиці Т. Коли курсор встановлений
на рядок таблиці Т, курсор також встановлений на відповідний рядок
таблиці В.
b) В іншому випадку курсор не асоціюється з іменованої таблицею.
a) Якщо не вказано UNION, то Т - це результат зазначеної <специфікації
запиту> (.
b) Якщо UNION вказано, то нехай для кожного зазначеного UNION Т1 і Т2
позначають результати <вираження запиту> ()
і <терма запиту> (). Результат UNION фактично
породжується наступним чином: i) ініціалізувати результат як порожню
таблицю.
ii) Занести в результат кожен рядок Т1 і кожен рядок Т2
iii) Якщо не вказано ALL, то видалити всі зайві дублікати строк з
результату.
a) Якщо не вказано ORDER BY, то:
i) Порядок рядків в Т визначається реалізацією.
ii) Порядок рядків може може бути різним у різних транзакції.
iii) Порядок рядків Т, встановлений при відкритті курсору, буде таким
ж при наступному відкритті курсору в цій же транзакції за умови, що:
Відсутні сторонні зміни будь-яких
таблиць, зазначеним у специфікації курсору.
Впорядкований набір значень параметрів, що передаються
в <процедуру> (), що містить <оператор
відкриття> (), є однаковим в обох
випадках.
Якщо ці умови не задовольняються, то упорядкування рядків у Т може
розрізнятися при послідовних відкриття курсору в одній транзакції.
b) Якщо ORDER BY вказано, то Т володіє порядком сортування: p>
i) Порядок сортування є послідовністю груп сортування.
Група сортування - це послідовність рядків, в яких всі значення
стовпців сортування ідентичні. Більше того, група сортування може бути
послідовністю груп сортування.
ii) Мощность послідовності і порядкова позиція кожної групи
сортування визначається значеннями найбільш значущих стовпців сортування.
Потужність послідовності є мінімальним числом груп сортування
таких, що для кожної групи сортування з числом рядків більше одиниці все
значення стовпця сортування ідентичні.
iii) Якщо порядок сортування грунтується на додаткових стовпцях
сортування, то кожна група сортування з числом рядків більше одиниці
є послідовністю груп сортування. Потужність кожної
послідовності і порядкова позиція кожної групи сортування всередині
кожної послідовності визначається значеннями наступного найбільш
значущого стовпця сортування. Потужність кожної послідовності є
мінімальним числом груп сортування таких, що для кожної групи з числом
строк більше одиниці всі значення цього стовпця сортування ідентичні.
iv) Попередній параграф застосовується по черзі до кожного додаткового
колонку сортування. Якщо група сортування складається з кількох рядків і
не єпослідовністю груп сортування, то порядок рядків у
групі сортування не визначений.
v) Нехай З означає стовпець сортування і S - послідовність, яка
визначається значеннями С.
vi) Напрямок сортування зв'язується з кожним стовпцем сортування. Якщо
напрямок для З задано за зростанням, то перша група сортування S
містить найменше значення С і кожна наступна група сортування
містить значення С більше, ніж значення С в попередній групі
сортування. Якщо напрямок для З задано за спаданням, то перша група
сортування S містить найбільше значення С і кожна наступна група
сортування містить значення С менше, ніж значення С в попередній
групі сортування.
vii) Упорядкованість визначається правилами порівняння, зазначеними в 5.11,
"<Предикат порівняння"> ().
Порядок невизначених значень по відношенню до не невизначеним
значенням визначається реалізацією, але повинен бути або строго більше
або строго менше всіх не невизначених значень.
viii) <Специфікація сортування> ()
специфікує стовпець сортування і напрям. Стовпець сортування - це
стовпець, що указується <цілим без знаку> ()
або <специфікацією стовпця> ().
<Ціле без знаку> () i посилається на i-ий
стовпець Т. <Специфікація стовпця> ()
вказує іменований стовпець.