2014-02-19 1 views
0

Я создал собственный репозиторий таблиц в базе данных оракула.Oracle: динамически создавать сценарии пакета без записи в файл

Я использую этот репозиторий для создания стандартизированных пакетов на таблицу. До сих пор я пишу кучу скриптов в папку utitlity.

Я больше не хочу проходить этот дополнительный путь, хотя файловая система больше.

Это пример файла:

CREATE OR REPLACE PACKAGE vpk_0003_produkte 
AS 

    TYPE t_cursor IS REF CURSOR; 

    PROCEDURE p_insert (p_rc     OUT NUMBER, 
         p_rc_text    OUT VARCHAR2, 
         p_logsql   IN  NUMBER, 
         p_logperformance IN  NUMBER, 
         p_user_id   IN  NUMBER, 
         p_mandant   IN NUMBER, 
         -- PK Columns 
    p_id IN OUT x_0003_produkte.id%TYPE 
         -- Other Columns 
, p_requestid IN  x_0003_produkte.requestid%TYPE); 

    PROCEDURE p_update (p_rc     OUT NUMBER, 
         p_rc_text    OUT VARCHAR2, 
         p_logsql   IN  NUMBER, 
         p_logperformance IN  NUMBER, 
         p_user_id   IN  NUMBER, 
         p_mandant   IN NUMBER, 
         p_where   IN  VARCHAR2, 
         -- PK Columns 
    p_id IN OUT x_0003_produkte.id%TYPE 
         -- Other Columns 
, p_requestid IN  x_0003_produkte.requestid%TYPE); 

END vpk_0003_produkte; 

Есть ли способ, чтобы выполнить эти строки непосредственно без записи файла? Я знаю «ОТКРЫТЫЙ КУРСОР ДЛЯ» в сочетании с переменной, которая содержит SELECT для получения данных. Но как выполнять/писать?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Один код пакета имеет 27 000 символов! и около 1000 линий.

Спасибо.

ответ

0

Если вы можете собрать весь источник пакета DDL в одну VARCHAR2(32000) локальную переменную, вы должны быть в состоянии использовать EXECUTE IMMEDIATE для запуска DDL

EXECUTE IMMEDIATE l_your_ddl_stmt; 

В зависимости от версии Oracle, вы можете быть в состоянии для вызова EXECUTE IMMEDIATE с CLOB, если оператор DDL может превышать 32000 байт. Вы также можете использовать dbms_sql, проходящие в коллекции строк VARCHAR2(4000), которые объединены в DDL, который вы хотите выполнить.

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

Смежные вопросы