Динамічний sql в oracle - легко і зрозуміло (частина третя - bulk, операції з множинами)

Використання множин при роботі з динамічним SQL

Робота зі складними типами даних BULK - масивами і колекціями підвищує продуктивність за рахунок мінімізації кількості перемикань контексту між PL / SQL і SQL. Тобто цілі колекції, а не тільки окремі елементи, передаються туди і назад.

За допомогою наступних команд, і атрибутів курсорів, можна побудувати динамічний SQL таким чином, щоб коректно здійснювалася робота з масивами і колекціям.

Синтаксис для динамічного зв'язування з використанням інструкції BULK

Інструкція BULK дозволяє Oracle працювати змінної в SQL. так. щоб обробляти безлічі значень. Тип безлічі може бути будь-який допустимі в PL / SQL (індекс-таблиці, вкладені таблиці, і масиви змінного розміру). Однак елементи повинні мати строго заданий тип даних SQL, CHAR. DATE або NUMBER. Динамічні колекції можуть застосовуватися в командах: EXECUTE IMMEDIATE. FETCH і FORALL.

EXECUTE IMMEDIATE і BULK

Ці оператори дозволяє вам дозволяє пов'язувати задані змінні або OUT аргументи і передавати їх, як параметри, для динамічного оператора SQL. Синтаксис має наступний вигляд:

Завдяки інструкції BULK можна повертати дані в колекції з динамічного SQL.

BULK і FETCH
BULK дозволяє залишити дані з динамічного курсора так само, як вибірку з статичного курсора. Синтаксис має наступний вигляд:


Якщо число визначених змінних в BULK COLLECT INTO. перевищує кількість стовпців в запиті, Oracle видає помилку.

Цей синтаксис дозволяє зв'язати вхідні змінні в динамічному SQL. Крім того, ви можете використовувати EXECUTE

Динамічна рядок може бути або INSERT. UPDATE або DELETE (але не SELECT).
Приклади динамічного SQL з використанням BULK

Наступний приклад демонструє використання BULK для виведення даних у відкриті масиви за допомогою FETCH

Використання BULK масовому оновленні записів спільно з returning результат поміщається в колекцію enames.

Приклад показує як використовувати FORALL і USING.