Ефективне програмування на PL

Written on 26 Грудня 2008 . Posted in Oracle

ЗМІСТ

Взаємозамінність динамічного курсору та REF-курсора

Ви знаєте, яким корисним може бути Native Dynamic Cursor, особливо коли до виклику не знаєш точно, що буде запитуватися. Динамічний PL/SQL також можна використовувати через DBMS_SQL. Обидва методи мають переваги. Але що буде, якщо ви почали розробляти програму, де використовується спочатку один метод, а потім необхідно переключитися на інший?

У Oracle Database 11 g цей процес надзвичайно простий. Пакет DBMS_SQL, що підтримується, має нову функцію, TO_REFCURSOR, яка конвертує динамічний курсор DBMS_SQL в ref-курсор. Ось приклад такої конвертації:

Припустимо, потрібно написати загальну процедуру, яка не знає списку стовпців у select-вираженні під час компіляції. Це той випадок, коли природний dynamic SQL стає необхідним. Можна описати йому ref-курсор. Тепер, щоб стало цікавіше, припустимо, що ви не знаєте всіх bind-змінних, для цього випадку найбільше підходить dbms_sql. Як виконати цю складну вимогу, написавши мінімум коду? Просто: почніть з dbms_sql для bind-змінних, а потім конвертуйте в ref-курсор.

Аналогічно, щоб конвертувати Native Dynamic SQL на REF-курсор, необхідно викликати іншу функцію, TO_CURSOR_NUMBER:

Ref-курсор, визначений у змінній c_ref_cur, має бути відкрито раніше цього виклику. Після цього виклику життя ref-курсора закінчено; маніпулювати можна лише dbms_sql-курсором.

Припустимо, ви знаєте bind-змінні під час компіляції, але знаєте списку select; ви можете почати з native dynamic sql, з ref-курсора, а потім замінити його на dbms_sql, щоб описатита витягти стовпці з курсору.

Висновок

Як бачите, Oracle Database 11 g містить кілька покращень, які допомагають писати код на PL/SQL більш ефективно.