Обработанный исходный код в PL/SQL: пакет DBMS_PREPROCESSOR

Обработанный исходный код в PL/SQL: пакет DBMS_PREPROCESSOR

Пакет DBMS_PREPROCESSOR используется для вывода или получения исходного текста вашей программы в обработанной (postprocessed) форме. DBMS_PREPROCESSOR предоставляет две программы, перегруженные для разных способов определения интересующего вас объекта, а также для использования отдельных строк и коллекций:

  •  dbms_preprocessor.print_post_processed_source — получает обработанный исходный код и выводит его функцией DBMS_OUTPUT.PUT_LINE.
  •  dbms_preprocessor.get_post_processed_source — возвращает обработанный исходный код в виде одной строки или коллекции строк.

При использовании версий этих программ, работающих с коллекциями, необходимо объявить, что коллекция базируется на следующей коллекции, определенной в пакете:

TYPE DBMS_PREPROCESSOR.source_lines_t IS TABLE OF VARCHAR2(32767)
   INDEX BY BINARY_INTEGER;

Следующий фрагмент демонстрирует возможности этих программ. Сначала я компилирую очень маленькую программу с директивой выбора, проверяющей уровень оптимизации, а затем вывожу обработанный код с правильной ветвью команды $IF:


PROCEDURE post_processed
IS
BEGIN
$IF $$PLSQL_OPTIMIZE_LEVEL = 1
$THEN
   -- Медленно и просто
  NULL;
$ELSE
   -- Быстро, современно и просто
   NULL;
$END
END post_processed;


SQL> BEGIN
  2     DBMS_PREPROCESSOR.PRINT_POST_PROCESSED_SOURCE (
  3        'PROCEDURE', USER, 'POST_PROCESSED');
  4  END;
 5  /

PROCEDURE post_processed
IS
BEGIN
-- Быстро, современно и просто
NULL;
END post_processed;

В следующем блоке функция get используется для получения обработанного кода, а затем выводит его вызовом dbms_output.put_line:

DECLARE
   l_postproc_code   DBMS_PREPROCESSOR.SOURCE_LINES_T;
   l_row             PLS_INTEGER;
BEGIN
   l_postproc_code :=
      DBMS_PREPROCESSOR.GET_POST_PROCESSED_SOURCE (
         'PROCEDURE', USER, 'POST_PROCESSED');
   l_row := l_postproc_code.FIRST;

   WHILE (l_row IS NOT NULL)
   LOOP
      DBMS_OUTPUT.put_line (  LPAD (l_row, 3)
                            || ' - '
                            || rtrim ( l_postproc_code (l_row),chr(10))
                           );
      l_row := l_postproc_code.NEXT (l_row);
   END LOOP;
END;

Условная компиляция открывает массу полезных возможностей для разработчиков PL/ SQL и администраторов приложений. Она становится еще более полезной с выходом новых версий базы данных Oracle и расширением набора констант DBMS_DB_VERSION, позволяющим более полно использовать особенности PL/SQL каждой версии.

 

Вас заинтересует / Intresting for you:

Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 14736 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 4633 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Символьные функции и аргументы...
Символьные функции и аргументы... 18545 просмотров Анатолий Wed, 23 May 2018, 18:54:01
Тип данных RAW в PL/SQL
Тип данных RAW в PL/SQL 12236 просмотров Doctor Thu, 12 Jul 2018, 08:41:33
Войдите чтобы комментировать