$ sqlplus / as sysdba
SQL> Create or Replace Procedure SYS.Pr_Compile_All Is
v_command varchar2(1500);
Begin
For c in
(
Select 'alter '||o.object_type||' '||o.owner||'.'|| o.object_name|| ' compile' command1,
'alter PACKAGE '||o.owner||'.'|| o.object_name|| ' compile' command2,
'alter PUBLIC SYNONYM '|| o.object_name|| ' compile' command3,
object_type,
owner
From dba_objects o
Where o.status = 'INVALID'
)
Loop
Begin
v_command := c.command1;
If c.object_type in ('FUNCTION','PROCEDURE','TRIGGER') Then v_command := v_command ||' debug'; End If;
If c.object_type in ('PACKAGE BODY') Then v_command := c.command2||' debug body'; End If;
If c.object_type in ('SYNONYM') and c.owner = 'PUBLIC' Then v_command := c.command3; End If;
Execute Immediate v_command;
Exception When Others Then null;
End;
End Loop;
End;
SQL> Create or Replace Public Synonym Pr_Compile_All For SYS.Pr_Compile_All;
SQL> grant execute on Pr_Compile_All to public;
SQL> conn myschema/pwd
SQL> begin Pr_Compile_All end; -- call from any schema you'd like, in this way.
4条答案
按热度按时间cbeh67ev1#
我有很多程序和函数在一个模式在oracle SQL开发人员,我想知道如何编译所有的程序和函数
在“连接”视图中:
我想知道如何[拥有]所有标准格式的过程和函数
这与重新编译无关,你可以对代码应用任何格式规则(空格/大小写等),只要代码保持语法正确,就不会影响代码是否重新编译。
转到“工具”〉“首选项...”〉“数据库”〉“SQL格式化程序”和edit the appropriate formatting to your specification。
然后右键单击过程/函数的代码and select "Format"(或按Ctrl + F7)。
您需要对每个过程和函数执行此操作,因为似乎没有SQL Developer选项可将其应用于方案中的所有对象。
siotufzp2#
或者,您可以使用引用程序的公共同义词,通过命令编译DB,创建和授权如下:
t30tvxxf3#
最好的方法是通过源代码管理来看待这个问题,希望真相的来源是一个颠覆或Git项目。
你可以用FORMAT命令把一个目录中的所有文件都输入到CLI中,然后它会遍历该文件夹中的每个文件,格式化代码,并将其写入提供的输出目录。
然后将这些文件签入源代码管理系统。
所以在这里我从3个未格式化的文件到3个格式化的文件,如果我在前后打开同一个“对象”...
所有这些都很好,但是要知道,一旦其他开发人员 checkout 一个文件,他们会立即改变它的外观,由于个人喜好。我不确定我是否见过一个成功的“格式化规则”系统,每个人都同意格式化相同的代码。但是,格式化它,因为它在您的VCS似乎工作正常...也将有助于DIFF/Delta。
从理论上讲,您也可以编写一些js并使用SQLcl来获取每个对象,对其进行格式化,然后编译它。
我不喜欢编译对象而不先查看它们的想法,但这只是我的想法。
lkaoscv74#
在
oracle 19c/18c
(已测试)中解决此问题的最佳方法是在DB服务器计算机上运行以下脚本:参考文献的链接在这里。