暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何在所有连接上编译代码

askTom 2017-07-31
476

问题描述

嗨,

场景: 我们使用6种不同的模式,我们正在编译所有模式上的代码。所以首先,我连接到这些模式,然后当我需要编译我的代码时,我做的是: 选择模式,编译,重复。

我想知道是否有一种技术可以在所有连接的连接 (或一系列选定的连接) 上编译代码。
我尝试在google,stackoverflow和asktom.oracle.com中搜索它,我什么也没发现。

提前谢谢。



问候,
懒惰的程序员

专家解答

你的意思是你想编译数据库中几个模式中的所有 (PL/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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论