问题描述
嗨,
场景: 我们使用6种不同的模式,我们正在编译所有模式上的代码。所以首先,我连接到这些模式,然后当我需要编译我的代码时,我做的是: 选择模式,编译,重复。
我想知道是否有一种技术可以在所有连接的连接 (或一系列选定的连接) 上编译代码。
我尝试在google,stackoverflow和asktom.oracle.com中搜索它,我什么也没发现。
提前谢谢。
问候,
懒惰的程序员
场景: 我们使用6种不同的模式,我们正在编译所有模式上的代码。所以首先,我连接到这些模式,然后当我需要编译我的代码时,我做的是: 选择模式,编译,重复。
我想知道是否有一种技术可以在所有连接的连接 (或一系列选定的连接) 上编译代码。
我尝试在google,stackoverflow和asktom.oracle.com中搜索它,我什么也没发现。
提前谢谢。
问候,
懒惰的程序员
专家解答
你的意思是你想编译数据库中几个模式中的所有 (PL/SQL) 对象?
如果是这样,你可以通过调用dbms_utility.compile_schema来做到这一点。顾名思义,这将编译指定架构中的所有对象:
您可以使用compile_all参数来说明是否要编译所有内容 (默认) 或仅编译无效对象 (传递false)。注意您需要特权来编译有问题的架构中的对象!
http://docs.oracle.com/database/122/ARPLS/DBMS_UTILITY.htm#GUID-A279BC5C-6CF5-4467-931D-0917C984DAB2
或者,如果您有权访问数据库服务器,则可以通过运行 $ ORACLE_HOME/rdbms/admin/utlrp.sql重新编译数据库中的所有对象。
如果是这样,你可以通过调用dbms_utility.compile_schema来做到这一点。顾名思义,这将编译指定架构中的所有对象:
select user from dual;
USER
------------------------------
CHRIS
create table t (
x int
);
grant create session to u identified by u;
grant select on t to u;
create or replace procedure u.p is
begin
for rws in (
select * from chris.t
) loop
null;
end loop;
end p;
/
alter table t add ( y int );
select object_name, status from all_objects
where owner = 'U';
OBJECT_NAME STATUS
------------------------------ -------
P INVALID
exec dbms_utility.compile_schema('U');
select object_name, status from all_objects
where owner = 'U';
OBJECT_NAME STATUS
------------------------------ -------
P VALID 您可以使用compile_all参数来说明是否要编译所有内容 (默认) 或仅编译无效对象 (传递false)。注意您需要特权来编译有问题的架构中的对象!
http://docs.oracle.com/database/122/ARPLS/DBMS_UTILITY.htm#GUID-A279BC5C-6CF5-4467-931D-0917C984DAB2
或者,如果您有权访问数据库服务器,则可以通过运行 $ ORACLE_HOME/rdbms/admin/utlrp.sql重新编译数据库中的所有对象。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




