2012-03-01 3 views
3

Я создал пакет, в котором тело содержит более 7000 строк, я хочу обернуть его с помощью SUBPROGRAMS DBMS_DLL. Кто-нибудь может предложить мне шаги?Как упаковать пакет

+0

+1, могу я спросить, почему вы не разбиваете пакет на несколько пакетов вместо этого? – Ben

ответ

1

Предполагая, что «7000 линий» транслирует более чем 32k вы можете сделать что-то вроде

declare 
    l_sql dbms_sql.varchar2a; 
begin 
    l_sql(1) := 'CREATE OR REPLACE PACKAGE pkg_foo '; 
    l_sql(2) := 'AS '; 
    l_sql(3) := ' PROCEDURE proc_foo(col1 IN NUMBER); '; 
    l_sql(4) := 'END;'; 
    dbms_ddl.create_wrapped(l_sql, 1, 4); 
end; 

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

+0

Привет, Джастин, Спасибо за ваш ответ. Должен упомянуть l_sql (1) ..... l_sql (7000) и ''? –

+0

@ Gurujothi.D - Если вы хотите использовать пакет «DBMS_DDL», а ваш оператор DDL - более 32 тыс., Вам придется построить ассоциативный массив типа 'dbms_sql.varchar2a' с отдельными компонентами вашего DDL. Вы могли бы генерировать меньше элементов в массиве, которые длиннее, или создавать больше элементов в массиве, которые короче, чем я. Я нахожу один элемент на строку кода (так что 7000 элементов в вашем случае) наиболее читабельны и проще всего создавать из текстового редактора, где существует оператор DDL. –

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