• Главная
  • Карта сайта
Не найдено

PLSQL - функції, процедури, змінні, курсори і цикли plsql

  1. Програмні одиниці PL / SQL
  2. процедура
  3. збережені функції
  4. тригери
  5. Структура блоку PL / SQL
  6. секція оголошень
  7. виконувана секція
  8. секція винятків
  9. змінні
  10. Оголошення констант PL / SQL
  11. оператор IF
  12. цикли
  13. LOOP
  14. цикл WHILE
  15. цикл FOR
  16. курсори
  17. Оголошення курсору і атрибути курсора
  18. Записи PL / SQL
  19. Використання команд OPEN, FETCH і CLOSE
  20. Курсорний цикл FOR
  21. Конструкція WHERE CURRENT OF
  22. Обробка помилок
  23. винятки
  24. Системні виключення
  25. Винятки, що визначаються програмістом
  26. Схема складного запиту PL / SQL з використанням тимчасових таблиць
  27. TOAD
  28. Терміни в винятки:

Programming Language for SQL (PL / SQL) - рішення Oracle, що надає кошти, які дозволяють виконувати складну обробку інформації (plsql).

Програмні одиниці PL / SQL

  • Процедура - це підпрограма, яка виконує специфічну дію (CREATE PROCEDURE).
  • Функція - це підпрограма, яка обчислює значення (CREATE FUNCTION).
  • PL / SQL пакети - це об'єкт бази даних, який групує логічно пов'язані типи, програмні об'єкти і підпрограми PL / SQL. Пакунок зазвичай складаються з двох частин - специфікації і тіла. Специфікація пакету - це інтерфейс з вашими додатками, вона оголошує типи, змінні, константи, виключення, курсори і підпрограми, доступні для використання в пакеті. Тіло пакета повністю визначає курсори і підпрограми, тим самим реалізуючи специфікацію пакета (CREATE PACKAGE і CREATE PACKAGE BODY).
  • динамічний SQL
    • Native Dynamic SQL (NDS)
    • DBMS_SQL
  • Тригери - це процедура, що зберігається особливого типу, яку користувач не викликає безпосередньо, а виконання якої обумовлено дією по модифікації даних. У Oracle розрізняють наступні види тригерів: BEFORE INSERT, AFTER INSERT, BEFORE UPDATE, AFTER UPDATE, BEFORE DELETE, AFTER DELETE (CREATE TRIGGER).
  • Опції компілятора
  • управління залежностями
  • Хинти або підказки (Oracle Hints) - засіб, що дозволяє явно впливати на план запиту. Хинти визначають загальні цілі і підходи для оптимізації плану виконання запиту, включаючи правила і методи доступу до даних - вказівка ​​порядку з'єднання таблиць, вказівка ​​методу з'єднання таблиць, вказівку конкретного індексу для доступу до таблиці.

Структура блоку PL / SQL

Блок PL / SQL може містити до чотирьох розділів, проте тільки один з них є обов'язковим.

  • Заголовок. Використовується тільки в іменованих блоках, визначає спосіб виклику іменованого блоку або програми. Не обов'язковий.
  • Розділ оголошень. Містить описи змінних, курсорів і вкладених блоків, на які є посилання в виконуваному розділі і розділі винятків. Не обов'язковий.
  • Виконуваний розділ. Команди, що виконуються ядром PL / SQL під час роботи програми. Обов'язковий.
  • Розділ винятків. Обробляє виключення (попередження і помилки). Не обов'язковий.

Структура блоку PL / SQL для процедури показана на малюнку:
Структура блоку PL / SQL для процедури показана на малюнку:   Малюнок «Процедура, яка містить всі чотири розділи»:
Малюнок «Процедура, яка містить всі чотири розділи»:

процедура

Процедура - це певний набір інструкцій, написаних на мові PL / SQL. Виклик процедури призводить до виконання що містяться в ній інструкцій. Процедура зберігається в базі даних, тому і називається збереженої. Процедура складається з двох основних частин: специфікації і тіла.
Специфікація процедури (procedure specification) включає в себе ім'я процедури і опис її вхідних та вихідних даних. Ці вхідні і вихідні дані називаються формальними параметрами (formal parameters) або формальними аргументами (formal arguments). Якщо при виклику процедури вказуються параметри командного рядка або інші вхідні дані, ці значення називаються фактичними (actual) параметрами або фактичними аргументами.
приклад специфікації

increase_salary_find_tax (increase_percent IN NUMBER: = 7, sal IN OUT NUMBER, tax OUT NUMBER)

Тут ми бачимо процедуру з трьома формальними параметрами. Слово IN після імені параметра означає, що при виклику процедура може вважати з цього параметра вхідний значення. Слово OUT означає, що процедура може використовувати даний параметр для повернення значення в ту програму, з якою вона була викликана. Комбінація IN OUT після імені параметра говорить про те, що параметр може використовуватися як для передачі значення процедурі, так і для повернення значення.
Тіло процедури (procedure body) - це блок PL / SQL-коду.

збережені функції

Функція PL / SQL схожа на процедуру PL / SQL: вона також має специфікацію і тіло. Головна відмінність між процедурою і функцією в тому, що функція призначена для повернення значення, яке може використовуватися в більшому SQL-Оператора.

тригери

Тригер - це процедура PL / SQL, яка виконується автоматично, коли відбувається деяке задане подія, зване тригерним подією (triggering event).
Наприклад, можна писати тригери, що спрацьовують при виконанні над таблицею операцій INSERT, UPDATE або DELETE; при видачі команд DDL; при вході користувача в систему або його вихід із системи; при запуску або зупинці бази даних; при виникненні помилок.
Між тригерами і процедурами PL / SQL є три відмінності:

  • Тригери можна викликати з коду програми. Oracle викликає їх автоматично у відповідь на певну подію.
  • Тригери не мають списку параметрів.
  • Специфікація тригера трохи відрізняється від специфікації процедури.

Структура блоку PL / SQL

Базовий блок PL / SQL складається з чотирьох секцій:

  • секції заголовка (header section);
  • необов'язковою секції оголошень (declaration section);
  • виконуваної секції (execution section);
  • необов'язковою секції винятків (exception section).

DECLARE - необов'язково - змінні, константи, курсори
BEGIN - обов'язково - команди SQL, керуючі команди PL / SQL
EXCEPTION - необов'язково - дії в разі виникнення помилок
END; - обов'язково

Анонімний блок (anonumous block) - це блок PL / SQL без секції заголовка, інакше кажучи, секції імені, тому він і називається анонімним. Анонімні блоки можуть виконуватися з SQL * Plus і використовуватися у функціях, процедурах і тригерах PL / SQL. Згадайте, що самі процедури, функції і тригери також складаються з базових блоків. Це означає, що базовий блок можна поміщати в інший базовий блок.

секція оголошень

Секція оголошень не є обов'язковою. У разі використання вона починається після секції заголовка і закінчується перед ключовим, словом BEGIN. Ця секція містить оголошення змінних, констант, курсорів, винятків, функцій і процедур PL / SQL, які будуть використовуватися в виконуваної секції та секції винятків. Всі оголошення змінних і констант повинні розміщуватися до оголошень функцій або процедур. Про змінних і константи PL / SQL буде детально розказано в наступному розділі. Оголошення повідомляє PL / SQL про те, що потрібно створити змінну, константу, курсор, функцію або процедуру відповідно до наведеної специфікації. Коли виконання базового блоку завершується, всі елементи, оголошені в секції оголошень, перестають існувати. Елементи, оголошені в секції оголошень базового блоку, можуть використовуватися тільки в межах цього блоку. Одним словом, все, що знаходиться в секції оголошень, при належить блоку і може використовуватися тільки усередині нього, а отже, існує тільки протягом його часу життя. Частина коду, в якій може використовуватися змінна, називається областю видимості (scope).

виконувана секція

Виконувана секція починається з ключового слова BEGIN і закінчується або ключовим словом EXCEPTION, якщо присутній секція винятків, або ключовим словом END, за яким слідують необов'язкове ім'я функції або процедури і крапка з комою. Виконувана секція містить один і більше PL / SQL-операторів, які виконуються при передачі управління цим блоком. Структура виконуваної секції показана нижче.

BEGIN

одініболее PL / SQL - операторів

[Секціяісключеній]

END [імяфункціііліпроцедури];

У виконуваному коді PL / SQL найчастіше зустрічається оператор присвоювання (: =). Він вказує, що потрібно обчислити вираз праворуч і помістити результат в змінну зліва.

секція винятків

В ході виконання PL / SQL-оператора може виникнути помилка, яка унеможливить подальше виконання програми. Такі виняткові ситуації називаються винятками (exceptions). Користувач, який викликав процедуру, повинен бути проінформований про виникнення виключення, а також про причини, що його викликали. Ви можете видати користувачеві змістовне повідомлення про помилку, або зробити деякі коригувальні дії і повторити операцію, виконувалася до виникнення помилки. Ви також можете відкинути редагування, які були зроблені в базі даних до цього моменту. PL / SQL допомагає вам у всіх цих випадках, надаючи засоби обробки виключень (exception handling).

EXCEPTION

WHEN ім'я _ісключенія THEN

дії, предпрінімаемиепрівознікновенііісключенія

WHEN ім'я _ісключенія THEN

дії, предпрінімаемиепрівознікновенііісключенія

Секція винятків починається з ключового слова EXCEPTION і триває до кінця блоку. Кожному виключенню відповідає оператор WHEN імя_ісключенія, який вказує, що має бути зроблено при виникненні даного виключення. Всі оператори, що знаходяться між оператором, що викликав помилку, і секцією винятків, ігноруються. Виконання оператора, зазначеного в секції винятків, називається обробкою виключення (exception handling). Процес, що включає в себе виявлення помилки, визначення, яке виключення описує її найкращим чином, і передачу PL / SQL інформації, що дозволяє знайти відповідний код в секції винятків, називається збудженням виключення (raising exception).

змінні

Змінні - це іменовані контейнери. Вони можуть містити інформацію (дані) різних видів. Залежно від того, яку інформацію в них можна поміщати, вони мають різні типи даних, а щоб відрізняти їх один від одного, їм присвоюються імена. PL / SQL зберігає числа в змінних типу NUMBER, а текст - в змінних типу CHAR або VARCHAR2. Синтаксис оголошення змінної в PL / SQL може мати будь-яку з наступних форм:

ім'я _переменнойтіп _данних [[NOTNULL]: = вираз _по _умолчанію];

ім'я _переменнойтіп _данних [[NOT NULL] DEFAULT вираз _по _умолчанію];

Ім'я_змінної - це будь-який правильний ідентифікатор PL / SQL. Правильний ідентифікатор PL / SQL повинен:

  • Мати не більше 30 символів в довжину і не містити символів пробілів (власне прогалин і знаків табуляції).
  • Складатися тільки з букв, цифр від 0 до 9, символу підкреслення (_), знака долара ($) і знака фунта (#).
  • Починатися з літери.
  • Чи не збігатися з зарезервованими словами PL / SQL або SQL, які мають спеціальне значення. Наприклад, ім'ям змінної не може бути слово BEGIN, яке позначає початок виконуваної секції базового блоку PL / SQL.

Тип_даних - це будь-який допустимий тип даних SQL або PL / SQL. Модифікатор NOT NULL вимагає, щоб змінна імелазначеніе. Якщо він зазначений, змінної повинно бути присвоєно значення за замовчуванням.

Оголошення констант PL / SQL

Синтаксис оголошення константи має наступний вигляд:

ім'я _переменнойтіп _данних CONSTANT: = вираз;

На відміну від змінних констант обов'язково присвоюється значення, яке не можна змінювати протягом часу життя константи. Константи дуже корисні для підтримки безпеки і дисципліни при розробці великих і складних додатків. Наприклад, якщо ви хочете гарантувати, що процедура PL / SQL НЕ буде модифікувати передані їй дані, можете оголосити їх константами. Якщо процедура все ж спробує їх модифікувати, PL / SQL порушить виняток.

оператор IF

Оператор IF має наступний синтаксис:

IF умова _1 THEN

дію _1;

[ELSIF умова _2 ТНЕ Nдействіе _2; ]

...

[ELSE альтернативне _действіе; ]

END IF;

Действіе_1 ... альтернативне Дія представляють один або кілька PL / SQL-операторів. Кожна група операторів виконується тільки в тому випадку, якщо виконано відповідне умова. Після того як виявлено виконання однієї з умов, інші умови не перевіряються.

цикли

PL / SQL надає три різні конструкції для итеративной обробки. Кожна з них дозволяє циклічно виконувати набір операторів PL / SQL. Вихід з циклу здійснюється в залежності від деякої умови.

LOOP

Конструкція LOOP повинен виглядати так:

ім'я _цікла LOOP

оператори;

EXIT ім'я _цікла [WHEN умова _вихода];

оператори;

END LOOP;

При наявності конструкції WHEN всі оператори в тілі циклу повторюються до тих пір, поки вираз условіе_вихода не прийме позитивне значення (тобто не стане істинним). Умова виходу перевіряється на кожному проході, інакше званому итерацией. Як тільки вираз приймає значення «істина», всі оператори після EXIT пропускаються, ітерації припиняються і виконання триває з першого оператора, наступного за END LOOP. Якщо умова WHEN відсутня, оператори між LOOP і EXIT виконуються тільки один раз. Очевидно, що опустивши умова WHEN, ви вчините нелогічно. Зрештою ідея циклу полягає в тому, щоб забезпечити потенційно багаторазове виконання коду.

цикл WHILE

Ще одним різновидом циклу є цикл WHILE. Він добре підходить в ситуаціях, коли кількість ітерацій заздалегідь невідомо, і визначається деяким зовнішнім фактором. Цикл WHILE має наступний синтаксис:

WHILE умова _вихода LOOP

оператори;

END LOOP;

Умова WHILE перевіряється перед кожним входом в цикл. Якщо воно має значення «істина», то виконується чергова ітерація.

цикл FOR

У циклі FOR для підрахунку ітерацій використовується змінна-лічильник, звана також індексом циклу (loop index). По завершенні кожної ітерації лічильник збільшується, починаючи з нижньої межі, або зменшується, починаючи з верхньої межі. Як тільки його значення вийде за вказаний діапазон, цикл завершується. Синтаксис циклу FOR виглядає наступним браза:

FOR лічильник IN [REVERSE] нижня _граніца. .верхняя _граніца LOOP

оператори;

END LOOP;

курсори

Курсор - це винятково важлива конструкція PL / SQL, що лежить в основі взаємодії PL / SQL і SQL. Назва «курсор» означає «поточний набір записів». Курсор являє собою спеціальний елемент PL / SQL, з яким пов'язаний SQL-оператор SELECT. Використовуючи курсор, можна окремо обробляти кожен рядок пов'язаного з ним SQL-оператора. Курсор оголошується в секції оголошень базового блоку. Він відкривається командою OPEN, а вибірка рядків здійснюється за допомогою команди FETCH. Після завершення всієї обробки курсор закривається командою CLOSE. Закриття курсору звільняє ті системні ресурси, які використовувалися, поки він був відкритий. Рядки, обрані курсором, можна заблокувати, щоб запобігти їх модифікацію іншими користувачами. Закриття курсору або виконання явною операції COMMIT або ROLLBACK призведе до розблокування рядків. Для SQL-операторів, які використовуються в коді PL / SQL, застосовуються приховані, або неявні (implicit), курсори, а також явні (explicit) курсори, тобто ті, яким присвоєно ім'я.

Оголошення курсору і атрибути курсора

Курсор оголошується в процедурі PL / SQL наступним чином:

CURSOR ім'я _курсора [([параметр _1 [, параметр _2...])]

[RETURN спеціфікаціявозврата] IS

оператор _select [FOR UPDATE [OF таблиця _ілі _столбец _1 [, таблиця _ілі _столбец _2. . . ]]]

Параметри курсору схожі на параметри процедури, за тим винятком, що вони завжди є вхідними (IN). Використання параметрів OUT або IN OUT неможливо, оскільки курсор не може їх модифікувати. Параметри використовуються в конструкції WHERE курсорних оператора SELECT. Специфікація повернення показує, записи якого типу будуть вибиратися оператором SELECT. Табліца_ілі_столбец - це ім'я стовпця, який належить оновлювати, або ім'я таблиці, в якій має бути видаляти або оновлювати рядки. Воно повинно входити в число імен таблиць і стовпців, зазначених в операторі SELECT курсору, і призначене для документування, показуючи, які елементи можуть бути потенційно модифіковані кодом, що використовують даний курсор. Команда FOR UPDATE блокує рядки, обрані оператором SELECT при відкритті курсору. Рядки залишаються заблокованими доти, поки ви не закриєте курсор розглянутими вище способами. Атрибути курсора:

  • імя_курсора% ISOPEN - Дозволяє перевірити, чи відкритий курсор. Якщо курсор імя_курсора вже відкритий, повертається значення TRUE
  • імя_курсора% ROWCOUNT - Кількість рядків таблиці, повернутих оператором SELECT курсора
  • імя_курсора% FOUND - Дозволяє перевірити, чи була успішною остання спроба отримання записи з курсора. Якщо запис була обрана, то повертається значення TRUE
  • імя_курсора% NOTFOUND - Протилежний атрибуту FOUND. Якщо записів більше не знайдено, повертається значення TRUE

Записи PL / SQL

Запис PL / SQL - це набір даних базових типів. До неї можна звертатися, як до єдиного цілого. Для доступу до окремих полів запису застосовується нотація імя_запісі_імя_поля, яку ви вже використовували для стовпців таблиці. Записи можуть мати один з трьох типів, перерахованих нижче; ви можете оголошувати змінні, що мають тип запису.

  • Засновані на таблиці (table- based) Ці записи мають поля, що збігаються по імені і типу за допомогою стовпців таблиці. Якщо курсор вибирає весь рядок - наприклад, оператором SELECT * FROM некоторая_табліца - то повертаються їм записи можна безпосередньо копіювати в змінну, що має тип запису, заснованої на таблиці некоторая_табліца.
  • Засновані на курсорі (cursor- based) Поля цих записів збігаються по імені, типу і порядку з заключним списком стовпців в курсорних операторі SELECT.
  • Певні програмістом (programmer- defined) Це записи, тип яких визначаєте ви самі.

Використання команд OPEN, FETCH і CLOSE

Команди відкриття курсору, вибірки з курсора і закриття курсору мають наступний синтаксис:

OPEN імякурсора;

FETCH ім'я _курсора INTO змінна _ілі _спісок _переменних;

CLOSE ім'я _курсора;

После Відкриття курсор містіть набір запісів, если в результате успішного Виконання оператора SELECT з бази даних були обрані задані рядки. Кожна команда FETCH видаляє запис з відкритого курсор і переміщує її вміст або в змінну PL / SQL, тип запису якої збігається з типом записи курсору, або в групу змінних PL / SQL, де кожна змінна в списку збігається за типом з відповідним полем в запису курсора . Перед тим як намагатися вибрати з курсору чергову запис, слід перевірити за допомогою атрибутів FOUND і NOTFOUND, чи є в ньому ще записи. Вибірки з пустого курсору будуть весь час давати останній запис, не приводячи до помилку. Не забувайте перевіряти атрибути FOUND і NOTFOUND при використанні FETCH. Фактична обробка записів з курсору зазвичай виконується всередині циклу. При написанні такого циклу непогано почати з перевірки, чи була знайдена запис в курсорі. Якщо так, можна продовжувати необхідну обробку; в іншому випадку слід вийти з циклу. Те ж саме можна зробити більш коротким шляхом, використавши курсорний цикл FOR. При цьому PL / SQL буде здійснювати відкриття, вибірку і закриття без вашої участі.

Курсорний цикл FOR

Синтаксис курсорних циклу FOR має наступний вигляд:

FOR запис _курсора IN ім'я _курсора LOOP

оператори;

END LOOP;

Цей цикл вибирає записи з курсору в змінну типу запісь_курсора. Поля запісі_курсора можна використовувати для доступу до даних з операторів PL / SQL, які виконуються в циклі. Коли всі записи обрані, цикл завершується. Для зручності відкриття і закриття курсору виробляється автоматично. Спробувавши вибрати запис з невідкритого курсору, ви отримаєте повідомлення in valid cursor (недійсний курсор). Якщо не закривати курсори, то в кінці кінців кількість відкритих курсорів досягне максимальної величини, що допускається системою.

Конструкція WHERE CURRENT OF

Коли курсор відкривається для поновлення або видалення вибраних записів, можна використовувати конструкцію WHERE CURRENT OF імя_курсора для доступу до таблиці і рядку, які відповідають останнього запису, обраної в конструкції WHERE оператора UPDATE або DELETE.

Обробка помилок

У мові PL / SQL помилки всіх видів інтерпретуються як виключення - ситуації, які не повинні виникати при нормальному виконанні програми.
До числа виключень належать:

  • помилки, що генеруються системою (наприклад, нестача пам'яті чи повторювана значення індексу);
  • помилки, які виникли внаслідок;
  • попередження, що видаються додатком користувачеві.

PL / SQL перехоплює помилки і реагує на них за допомогою так званих оброблювачів винятків. Механізм оброблювачів винятків дозволяє чітко відокремити код обробки помилок від основної логіки програми, а також дає можливість реалізувати обробку помилок, керовану подіями. Незалежно від того, як і з якої причини виникло конкретне виключення, воно завжди обробляється одним і тим же оброблювачем в розділі винятків.
При виникненні помилки - як системної, так і помилки в додатку - в PL / SQL ініціюється виключення. В результаті виконання блоку переривається, і управління передається для обробки в розділ винятків поточного блоку, якщо він є. Після обробки виключення повернення в той блок, де виключення було ініційовано, неможливий, тому управління передається в зовнішній блок.
Схема передачі управління при виникненні виключення:
PL / SQL перехоплює помилки і реагує на них за допомогою так званих оброблювачів винятків

Існує два типи винятків:

  • Системне виключення визначається в Oracle і зазвичай ініціюється виконуваним ядром PL / SQL, які виявили помилку. Одним системним винятків присвоюються імена (наприклад, NO_DATA_FOUND), інші обмежуються номерами і описами.
  • Виняток, яке визначається програмістом, актуально тільки для конкретного додатка. Ім'я виключення можна пов'язати з конкретною помилкою Oracle за допомогою директиви компілятора EXCEPTION_INIT або ж призначити помилку номер і опис процедурою RAISE_APPLICATION_ERROR.

винятки

Виняток - це стан помилки, яке активізується - або збуджується - при виникненні деякої проблеми. Існує багато різних виключень, кожне з яких пов'язане з певним типом проблем. При виникненні виняткової ситуації виконання коду зупиняється на операторі, який порушив виняток, і управління передається тій частині блоку, яка обробляє це виняток. Якщо блок не містить виконуваної секції, PL / SQL намагається знайти виконувану секцію під включає базовому блоці (enclosing basic block), тобто в блоці, який є зовнішнім по відношенню до коду, який порушив виняток. Якщо в безпосередньому включає блоці відсутній обработчікданного виключення, то пошук продовжується в блоках наступних рівнів, поки не буде знайдений відповідний обробник, а якщо його знайти не вдається, то виконання програми припиняється з видачею повідомлення про необроблюваної помилку. Частина блоку, призначена для обробки винятків, - це ідеальне місце для видачі інформативних повідомлень про помилки і виконання очищення (cleanup), що дозволяє позбутися від усього, що могло б надалі викликати плутанину або проблеми. Якщо виняток було порушено в ході виконання процедури, вставляти рядки в таблицю, то типова процедура очищення може включати в себе оператор ROLLBACK. Після того як управління було передано оброблювачу виключення, воно вже не повертається оператору, який став причиною цього винятку. Замість цього управління передається оператору включає базового блоку, який йде відразу за викликом вкладеного блоку або процедури / функції.

Системні виключення

В PL / SQL можна видавати користувачам інформацію про помилку двома способами. Перший спосіб - використовувати команду SQLCODE, яка повертає код помилки. Цей код є негативне число, зазвичай рівне номеру помилки ORA, яка виводиться при завершенні програми, якщо виключення залишилося необробленим. Другий спосіб - повертати текстове повідомлення, яке описує помилку. Не дивно, що відповідна команда називається SQLERRM. У обробнику виключення можна використовувати як SQLCODE, так і SQLERRM. Зауваження: не у всіх системних винятків є імена. Системні виключення:

  • CURSOR_ ALREADY_ OPEN - Спроба відкрити вже відкритий курсор;
  • DUP_ VAL_ ON_ INDEX - Спроба вставити повторюється значення в стовпець, який має унікальний індекс, а отже, обмеження унікальності;
  • INVALID_ CURSOR - Спроба застосувати команду FETCH до невідкритих курсору або спроба закрити курсор, який не відкривався;
  • NO_ DATA_ FOUND - Спроба виконати SELECT INTO, коли SELECT повертає нульове кількість рядків, а також інші причини;
  • PROGRAM_ ERROR - Внутрішня помилка. Зазвичай означає, що вам потрібно звернутися в службу підтримки Oracle;
  • STORAGE_ ERROR - Програма явно не вистачає системної пам'яті;
  • TIME_ OUT_ ON_ RESOURCE - Програма занадто довго чекала доступності деякого ресурсу;
  • TOO_ MANY_ ROWS - SELECT INTO в PL / SQL повернув більше одного рядка;
  • VALUE_ ERROR - PL / SQL зустрів неправильне перетворення або усічення даних, або неправильне обмеження на дані;
  • ZERO_ DMDE - Спроба ділення на нуль;
  • OTHERS - Решта виключення і внутрішні помилки, які не охоплюються винятками, визначеними в базовому блоці. Використовується в тих випадках, коли ви точно не знаєте, яке іменоване виключення потрібно буде обробляти, і хочете обробляти будь-які розпочаті виключення.

Винятки, що визначаються програмістом

Однією із зручних можливостей PL / SQL є те, що він дозволяє вам визначати свої власні виключення. При порушенні і обробці вони повинні іменуватися і оголошуватися аналогічно будь-яким іншим елементам PL / SQL. Виняток оголошується в секції оголошень. Аналогічно будь-який інший оголошеної там змінної, виняток дійсно тільки для даного блоку. Ви можете використовувати свої власні виключення для обробки помилок, які система не виявляє або не вважає за помилки.

Схема складного запиту PL / SQL з використанням тимчасових таблиць

Нижче розглянута схема отримання результуючої таблиці в Oracle Database, використовуючи тимчасові таблиці.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

PROCEDURE NameYourProcedure IS

- Об'явленіяпеременних

VarName type;

- Об'явленіякурсоров, приклад:

CURSOR NameCursor (...) IS

SELECT. . . FROM. . . ;

- Блок BEGIN. . . END

BEGIN

- Здесьможноіспользоватькурсор

- Дальшеяопішуваріант, которийіспользуетсявместо VIEW, егоможнозапустітьвоткритомкурсореілікаком -тоцікле (FOR LINE... LOOP)

- "Замість View використовувати тимчасові таблиці, а результат інсерти в проміжну таблицю"

INSERT INTO NameYourTableResult (

Field1,

Field2,

Field3

. . .

FieldN

)

WITH - ветотблокпомещаютсявременниетабліци, коториеізаменяют View

TempTable1 as (

- Складне SQL запит, результаткоторогобудетхранітьсяв TempTable1 напротяженіівсего INSERT INTO

)

TempTable2 as (

- Складне SQL запит, вкотороммиможеміспользоватьвременнуютабліцу TempTable1 ідругіетабліцибазиданних

)

TempTable3 as (

- Складне SQL запит, вкотороммиможеміспользоватьвременниетабліци TempTable1, TempTable2 ідругіетабліцибазиданних

)

-. . . ітакдалее, ноглавноенеувлекаться:)

- Основнойблок SELECT, ізкоторогорезультатипойдутвкоманду INSERT INTO (колічествополейв SELECT равноколічествуполейв INSERT)

- Ветомзапросе SELECT іспользуютсявременниетабліци TempTable1, TempTable2, TempTable3 ит .буд .ідругіеісточнікіданних

SELECT - Переченьполей

FROM TempTable3, sourceTable1, sourceTable2, sourceTable3

JOIN. . .

WHERE. . . ;

END;

END NameYourProcedure;

Тепер можна використовувати звичайний SQL для отримання предрассчітанних даних в зручний час (наприклад вночі або вранці, для оптимізації використання ресурсів сервера і інформаційних систем).

TOAD

Інструментальне засіб TOAD (Tool for Oracle Application Development) є одним з найбільш популярних засобів розробки серверних додатків Oracle. TOAD в процесі роботи дозволяє встановлювати декілька з'єднань з БД. Доступ до набору інструментальних засобів, що використовуються при розробці та налагодженні серверних додатків і схем баз даних здійснюється, переважно, з допомогою пункту головного меню Database.

  • Database -> Schema Browser - відкриває вікно браузера, за допомогою якого здійснюється доступ до інформації про об'єкти схем, видимих в поточному з'єднанні.
  • Database -> SQL Editor - використовується для написання і виконання команд і скриптів SQL;
  • Database -> Procedure Editor - надає користувачеві інструментальні засоби для розробки блоків PL / SQL;
  • Database -> SQL Modeller - підтримує процес візуального складання SQL-запитів;
  • Database -> Export -> ... - надає користувачеві можливість вивантаження даних з БД у вигляді скриптів SQL;
  • Database -> Import -> ... - імпортує дані в БД;
  • Database -> Commit - здійснює фіксацію транзакції в поточному з'єднанні;
  • Database -> Rollback - здійснює відкат транзакції в поточному з'єднанні.

Терміни в винятки:

  • Розділ винятків - необов'язковий розділ блоку PL / SQL (анонімного блоку, процедури, функції, тригера або ініціалізації розділу пакета), що містить один або кілька обробників винятків. Структура розділу винятків дуже схожа на структуру команди CASE.
  • Ініціювати виключення - значить зупинити виконання поточного блоку PL / SQL, сповіщаючи виконується ядро про помилку. Виняток може ініціювати або Oracle, або ваш власний програмний код за допомогою команди RAISE або процедури RAISE_APPLICATION_ERROR.
  • Обробити виняток - значить перехопити помилку, передавши управління оброблювачу виключення. Написаний програмістом обробник може містити код, який у відповідь на виключення виконує певні дії (наприклад, записує інформацію про помилку в журнал, виводить повідомлення для користувача або передає виняток у зовнішній блок).
  • Область дії - частина коду (конкретний блок або весь розділ), в якому може ініціюватися виняток, а також частина коду, що ініціюються виключення якого можуть перехоплюватися і оброблятися відповідним розділом винятків.
  • Передача виключення - процес передачі виключення в зовнішній блок, якщо в поточному блоці цей виняток не оброблено.
  • Необроблене виняток - виняток, яке передається без обробки з «самого зовнішнього» блоку PL / SQL. Після цього управління передається виконавчої середовищі, яка вже сама визначає, як відреагувати на виключення (виконати відкат транзакції, вивести повідомлення про помилку, проігнорувати її і т. Д.).
  • Анонімне виняток - виняток, з яким пов'язаний код помилки і опис. Таке виключення не має імені, яке можна було б використовувати в команді RAISE або секції WHEN обробника винятків.
  • Іменоване виняток - виняток, якому ім'я присвоєно або Oracle (в одному з вбудованих пакетів), або розробником. Зокрема, для цієї мети можна використовувати директиву компілятора EXCEPTION_INIT (в такому випадку ім'я можна буде застосовувати і для ініціювання, і для обробки виключення).
  • Крістофер Аллен - ORACLE PL / SQL «Як писати потужні й гнучкі програми на PL / SQL»
  • Фейерштейн С., Прибув Б. - «Oracle PL / SQL. Для професіоналів. »6-е изд. - СПб .: Пітер, 2015. - +1024 с.

Новости
Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью