...:: = LANGUAGE (COBOL | FORTRAN | PASCAL | PLI):: = AUTHORIZATION:: =
Синтаксичні правила b> p>
Для кожного () в
() Повинна існувати рівно один
() В цьому
(), Яка містить () зі специфікацією (), оголошеного в ().
() Повинен бути асоційований з
прикладної програмою за її виконання. Прикладна програма повинна бути
асоційована не більше ніж з одним ().
Загальні правила b> p>
Якщо ()
() Специфікує COBOL (відповідно FORTRAN, PASCAL, PLI)
і якщо агент, що виконує виклик ()
цього (), не є стандартною програмою
мовою COBOL (відповідно FORTRAN, Pascal, PL/1), то результат
невизначений.
Після виконання агентом на мові програмування останнього
виклику () в
() Неявно виконується () або ().
Вибір одного з цих () визначається
реалізацією. Якщо має місце невосстанавлваемая помилка, то СУБД має
виконати ().
7.2. ()
Функція b> p>
Визначає ім'я (). p>
Формат b> p>
:: = MODULE []
Синтаксичні правила b> p>
() Має відрізнятися від
() Будь-якого іншого
() В тому ж оточенні. Поняття оточення визначається в
реалізації.
Загальні правила b> p>
()
визначає необов'язковий () як
(), Що визначає містить
() В даному оточенні.
7.3. ()
Функція b> p>
Визначає процедуру і оператор мови SQL. p>
Формат b> p>
:: = PROCEDURE ...;;:: = |:: = SQLCODE:: = | | | | | | | | | |
Синтаксичні правила b> p>
() Повинно відрізнятися
від () будь-який інший
() В містить модулі.
в кожному
() В
() Має відрізнятися від () будь-якого іншого () в цієї процедури.
Будь-яке (), що міститься
в ()
(), Повинно бути специфікована в () цієї процедури.
Якщо () в () збігається з
() В () (), що містить цей
(), То (), яка містить це (), повинна містити
().
Законний виклик () повинен
поставляти n параметрів, де n - число
() В даній
().
Процедура має містити рівно один
(). На параметр, який відповідає параметру
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) Виконується () 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, то кожна
() В () повинна ідентифікувати стовпець таблиці Т.
a) Якщо ()
містить (), то
()
ідентифікує стовпець Т з ім'ям, зазначених у цій ().
b) Якщо ()
містить (), то це ціле
повинно бути більше нуля і не більше ступеня таблиці T. () Вказує стовпець Т з порядкової
(ordinal) позицією, спеціфіціруемой цим
().
Загальні правила b> p>
a) Якщо Т змінна (updatable) таблиця, то курсор асоціюється з
іменованої таблицею, ідентифікованої () з (). Нехай У позначає
іменовану цю таблицю. Для кожного рядка в Т існує відповідна
рядок у В, з якої отримано рядок таблиці Т. Коли курсор встановлений
на рядок таблиці Т, курсор також встановлений на відповідний рядок
таблиці В.
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-ий
стовпець Т. ()
вказує іменований стовпець.
ix) Якщо в ()
зазначено DESC, то напрям сортування, спеціфіціруемое цієї
(), Є
напрямком за спаданням. Якщо вказано АSC або не вказано ні ASC, ні
DESC, то напрям сортування для цього стовпця сортування є
напрямком за зростанням.
x) Послідовність ()
визначає відносну значимість сортируемих стовпців. Стовпець
сортування, зазначений у першому (), найбільш значущий і кожний наступний стовпець
сортування є менш значущим, ніж попередній стовпець сортування.
8.4. ()
Функція b> p>
Видаляє рядок таблиці. p>
Формат b> p>
:: = DELETE FROM WHERE CURRENT OF
Синтаксичні правила b> p>
Застосовуються () для () повинні включати DELETE.
Зауваження: "Застосовуються
() "Для ()
визначаються в 6.10,
"().
Що містить () повинен містити
() CR з тим же (), що й () в ().
Таблиця, на яку вказує CR, не повинна бути тільки читається.
Нехай Т позначає таблицю, що ідентифікується (). Т повинна бути таблицею, ідентифікованої
в першу () в () CR.
Загальні правила b> p>
Курсор CR повинен бути встановлений на рядок.
Рядок, з якої отримано поточний рядок CR, віддаляється.
8.5. ()
Функція b> p>
Видаляє рядки таблиці. p>
Формат b> p>
:: = DELETE FROM WHERE []
Синтаксичні правила b> p>
Застосовуються () для () повинні включати DELETE.
Зауваження: Застосовуються () для
() Визначаються в 6.10,
"()".
Нехай Т позначає таблицю, що ідентифікується (). Т не повинна бути тільки читається
таблицею або таблицею, яка ідентифікується в
() Будь-якого (),
що міститься в ().
Область дії () --
цілком (.
Загальні правила b> p>
а) Якщо не вказано (), то
видаляються всі рядки таблиці Т.
б) Якщо вказано (), то
умова застосовується до кожного рядка Т з (), пов'язаним з цим рядком, і всі рядки, для яких результат
() Є true, видаляються.
Кожен () в
() Реально виконується для кожного рядка T і
результати використовуються в застосуванні () до даної рядку Т. Якщо будь-який виконуваний
() Містить зовнішнє посилання на стовпець Т, то це посилання
вказує на значення цього стовпця в цьому рядку Т.
Зауваження: "Зовнішнє посилання" визначається в 5.7,
"()".
8.6. ()
Функція b> p>
Встановлює курсор на наступний рядок таблиці і вибирає значення з цього рядка. p>
Формат b> p>
:: = FETCH INTO:: = [{,}...]
Синтаксичні правила b> p>
Що містить () повинен містити
() CR з тим же (), що й () в (). Нехай Т
позначає таблицю, специфіковані через
() CR.
Число () в
() Повинно бути таким
само як ступінь таблиці Т.
а) Якщо тип даних мети, зазначеної i-ой
() (), Є типом символьних рядків, то тип даних
i-ого стовпця таблиці Т повинен бути типом символьних рядків.
b) Якщо тип даних мети, зазначеної i-ой
() (), Є типом точних чисел, то тип даних
i-ого стовпця таблиці Т повинен бути типом точних чисел.
c) Якщо тип даних мети, зазначеної i-ой
() (), Є типом приблизних чисел, то тип
даних i-ого стовпця таблиці Т повинен бути типом приблизних чисел або
типом точних чисел.
Загальні правила b> p>
Курсор CR повинен бути у відкритому стані.
Якщо таблиця, що вказується курсором CR, є порожньою, або CR
позиціонується на останній рядок або за нею, то CR встановлюється в
позицію після останнього рядка, параметру SQLCODE присвоюється значення
100 і значення не присвоюються цілям,ідентифікованим в ().
Якщо CR встановлений в позицію перед рядком, то CR встановлюється
на цей рядок і значення цього рядка присвоюються відповідним цілям.
Якщо CR встановлений на r, де r - це рядок, відмінна від останньої
рядка, то курсор встановлюється на рядок, безпосередньо наступну за
рядком r, і значення з рядка за r присвоюються відповідним цілям.
Присвоєння значень цілям у
(), Крім параметра SQLCODE, здійснюються в
порядку, який визначається реалізацією. Параметр SQLCODE отримує значення
останнім.
Якщо в процесі привласнення значення мети виникає помилка, то в
параметр SQLCODE встановлюється негативне значення, яке визначається
реалізацією, і значення цілей, відмінних від параметра SQLCODE, залежать від
реалізації.
Нехай V позначає мета, а v - відповідне значення в поточній
рядку CR.
Якщо v - це невизначене значення, то для V повинен бути
специфікована індикатор, і цей індикатор встановлюється в -1. Якщо v --
не невизначений значення, і V має індикатором, то:
a) Якщо тип даних V є тип символьних рядків довжини L і довжина M v більше
L, то індикатор отримує значення M.
b) Інакше значення індикатора встановлюється в 0.
Мета, ідентифікована i-тої
() З (), відповідає i-ому значенням з поточного рядка CR.
a) Якщо тип даних V є тип символьних рядків, і довжина v дорівнює довжині V,
то значенням V стає v.
b) Якщо тип даних V є тип символьних рядків довжини L, і довжина v більше
L, то значенням V стають першими L символів v.
c) Якщо тип даних V є тип символьних рядків довжини L, і довжина M v менше
L, то значенням перший M символів V стає v, і в останні LM
символів V встановлюються символи пробілу.
d) Якщо тип даних V є тип точних чисел, то має існувати
подання значення v в типі даних V таке, щоб не загубилися будь-які
перші значущі цифри, і значенням V стає це подання.
e) Якщо тип даних V є тип приблизних чисел, то значенням V
стає приблизне значення v.
()
Функція b> p>
Створює нові рядки в таблиці p>
Формат b> p>
:: = INSERT INTO [()] (VALUES () |):: = [{,}...]:: = [{,...]:: = | NULL
Синтаксичні правила b> p>
Застосовуються () до () повинні включати INSERT.
Зауваження: Застосовуються () для
() Визначаються в 6.10,
"()".
Нехай Т позначає таблицю, що ідентифікується (). Т не повинна бути тільки читається
таблицею або таблицею, яка ідентифікується в
() () Або якого-небудь (),
що міститься в ().
Кожне () в () має ідентифікувати
стовпець Т, і один і той самий стовпець не повинен бути ідентифікований більше
одного разу. Відсутність () є неявної специфікацією
(), Який ідентифікує всі стовпці Т в порядку
зростання їх порядкових позицій усередині Т.
Стовпець, ідентифікований у
(), Є об'єктним стовпцем.
а) Якщо вказується (), то число () в
це ()
має дорівнювати числу () в
(). Нехай
i-ий елемент ()
вказує на i-у () в цьому ().
b) Якщо вказується (), то ступінь таблиці, специфіковані цієї
(), Повинна бути
дорівнює числу () в (). Нехай i-ий елемент
() Вказує на i-ий
стовпець таблиці, специфіковані
().
Якщо i-ий елемент () не є невизначеним
(), То:
а) Якщо тип даних стовпця таблиці Т, зазначений i-м (), є типом символьних рядків довжини
L, то тип даних i-ого елемента () повинен бути типом символьних рядків з довжиною меншою або
рівною L.
b) Якщо тип даних стовпця таблиці Т, зазначений i-м (), є типом точних чисел, то тип
даних i-ого елемента ()
повинен бути типом точних чисел.
c) Якщо тип даних стовпця таблиці Т, зазначений i-м (), є типом приблизних чисел,
то тип даних i-ого елемента () повинен бути типом приблизних чисел або типом точних
чисел.
Загальні правила b> p>
Рядок вставляється з наступних кроків:
а) Фактично створюється можлива рядок, як це зазначено в Загальних правилах
6.4, "()". Якщо Т
- Це базова таблиця В, то можлива рядок включає кожен стовпець В.
Якщо Т - це представляється таблиця, то можлива рядок включає кожен
стовпець базової таблиці В, з якої породжується Т.
b) Для кожного об'єктного стовпця в можливій рядку його значення
замінюється на вставляються значення.
c) Можлива рядок вставляється в таблицю В.
Якщо Т - надається таблиця, визначена через
() З "WITH
CHECK OPTION ", то якщо (), що міститься в
(), Включає (), не міститься в (), то
() Цього () повинно бути правдою для можливої
рядка.
Якщо вказується (), то:
а) Якщо i-е () з
() Є
(), То значення
стовпця можливої рядки, соответствущего i-ому об'єктному колонку,
є значенням цієї ().
b) Якщо i-е () з
() Є
невизначеним значенням, то значення стовпця можливої рядки,
відповідного i-ому об'єктному колонку, є невизначеним значенням.
Якщо вказується (), то нехай R позначає результат цієї (). Якщо R порожній, то параметру
SQLCODE присвоюється значення 100, і ніяка рядок не вставляється. Число
створених можливих рядків одно потужності R. Вставляються значення однієї
можливої рядки є значеннями одного рядка R, і значення в одній
рядку R є вставляються значеннями однієї можливої рядка.
Нехай V позначає рядок R чи послідовність значень
специфіковані (insert value
list>). Тоді i-е значення V є вставляються значенням об'єктного
стовпця, що ідентифікується i-м () в ().
Нехай З позначає Об'єктовий стовпець. Нехай v означає не
невизначений вставляються значення С.
а) Якщо тип даних С є тип символьних рядків і довжина v дорівнює довжині С, то
значення З встановлюється в v.
b) Якщо тип даних С є тип символьних рядків і довжина M v менше L, то
перший M символів C встановлюються в v, і в останні LM символи C
заноситься символ пробілу.
c) Якщо тип даних С є тип точних чисел, то має існувати
подання значення v в типі даних З таке, щоб не загубилися
ніякі перші значущі цифри, і це подання стає значенням С.
d) Якщо тип даних С є тип приблизних чисел, то значенням З
стає приблизне значення v.
8.8. ()
Функція b> p>
Відкриває курсор p>
Формат b> p>
:: = OPEN
Синтаксичні правила b> p>
Що містить () повинен містити
() CR з тим же (), що й () в ().
Загальні правила b> p>
Курсор CR повинен бути в закритому стані.
Нехай S позначає (курсору CR.
Курсор CR переводиться у відкритий стан наступними кроками:
а) Фактично створюється копія S, в якій кожна () замінюється на значення
ідентифікованої мети.
b) Якщо S специфікує тільки читається таблицю, то ця таблиця фактично
створюється відповідно до специфікації - копією S.
c) Курсор CR переводиться у відкритий стан і його позиція
встановлюється перед першим рядком таблиці.
8.9. ()
Функція b> p>
Завершує поточну транзакцію з відкотом. p>
Формат b> p>
:: = ROLLBACK WORK
Синтаксичні правила b> p>
Ні. p>
Загальні правила b> p>
Будь-які зміни бази даних, скоєні в поточної транзакції,
анулюються.
Будь-курсор, відкривався в поточної транзакції, закривається.
Поточна транзакція завершується.
8.10. ()
Функція b> p>
Вибирає значення з специфікований рядки таблиці. p>
Формат b> p>
:: = SELECT [ALL | DISTINCT] INTO:: = [{,}...]
Синтаксичні правила b> p>
Застосовуються () для кожного
() Повинні включати SELECT.
Зауваження: Застосовуються () для
() Визначаються в 6.10,
"()".