2012-03-01 97 views
3

我创建了一个包含7000多行的包,我想用DBMS_DLL SUBPROGRAMS包装它。任何人都可以请建议我的步骤?如何打包一个包

+0

+1,请问为什么你不把包分解成多个包? – Ben 2012-03-01 09:01:42

回答

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; 

请确保您有您的外部数据库 - 安全地存储包的实际来源没有办法一旦包裹被打包,打开包装,因此任何未来的修改都需要从未打包的源代码开始。

+0

嗨贾斯汀,谢谢你的回复。我必须提及l_sql(1)..... l_sql(7000)和''? – 2012-03-01 05:58:29

+0

@ Gurujothi.D - 如果你想使用'DBMS_DDL'包,并且你的DDL语句大于32K,你必须用你的DDL的各个组件构造一个类型为'dbms_sql.varchar2a'的关联数组。您可以选择在数组中生成更少的元素,或者在数组中创建更多的元素,这些元素与我所做的一样短。每行代码中找到一个元素(所以您的案例中有7000个元素)是最易读和最容易从存在DDL语句的文本编辑器生成的。 – 2012-03-01 06:30:30