之后,编译所有这些对象.我们首先使用DBMS_UTIliTY.COMPILE_SCHEMA来编译所有这些对象.但是,COMPILE_SCHEMA不会添加调试信息.我们还想添加调试信息.
最好的方法是什么?这是我们当前的算法:
>创建所有对象
>逐个编译调试模式中的所有对象.这会使许多对象无效,这些对象引用了列表中稍后出现的对象.
>使用DBMS_UTIliTY.COMPILE_SCHEMA重新编译所有对象,以便所有对象都有效.
在这种情况下,所有对象都被编译两次,这显然不是最佳的.有很多对象所以需要很长时间.我们希望加快速度.
是否有任何可用的功能与DBMS_UTIliTY.COMPILE_SCHEMA相同,但包含调试信息?
@H_502_22@解决方法 如 the documentation中所述:DEBUG
Has the same effect as
PLsql_OPTIMIZE_LEVEL=1
—instructs the PL/sql compiler to generate and store the code for use by the PL/sql deBUGger. Oracle recommends usingPLsql_OPTIMIZE_LEVEL=1
instead of DEBUG.
因此,您可以在创建对象之前或重新编译模式之前设置它.为了匹配sql Developer在“编译调试”时所做的事情,您还需要将PLsql_DEBUG设置为true.这是一个快速演示:
create or replace package p42 as function f return number;end p42;/create or replace package body p42 as function f return number is begin return 42; end f;end p42;/select name,type,plsql_optimize_level,plsql_deBUGfrom user_plsql_object_settings where name = 'P42';name TYPE PLsql_OPTIMIZE_LEVEL PLsql_DEBUG------------------------------ ------------ -------------------- -----------P42 PACKAGE 2 FALSE P42 PACKAGE BODY 2 FALSE alter session set plsql_optimize_level = 1;alter session set plsql_deBUG = true;exec dbms_utility.compile_schema(user);select name,plsql_deBUGfrom user_plsql_object_settings where name = 'P42';name TYPE PLsql_OPTIMIZE_LEVEL PLsql_DEBUG------------------------------ ------------ -------------------- -----------P42 PACKAGE 1 TRUE P42 PACKAGE BODY 1 TRUE
当然,你可以在创建对象之前改变你的会话,但是如果你知道你总是要总是重新编译模式 – 如果你必须重新编译所有东西,而不仅仅是无效的对象 – 那么等到那时可能是好.但是如果您确实在启用调试的情况下创建对象,您仍然可以使用以下命令重新编译并保留它:
DBMS_UTIliTY.COMPILE_SCHEMA(schema => user,reuse_settings => true);
…如果要重新编译所有内容,或者只想重新编译无效对象:
DBMS_UTIliTY.COMPILE_SCHEMA(schema => user,compile_all => false,reuse_settings => true);总结
以上是内存溢出为你收集整理的使用调试信息编译Oracle模式全部内容,希望文章能够帮你解决使用调试信息编译Oracle模式所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)