如何在oracle sql developer中编译所有标准格式的过程

ehxuflar  于 2023-01-25  发布在  Oracle
关注(0)|答案(4)|浏览(135)

我在Oracle SQL Developer的一个模式中有很多过程和函数,我想知道如何在Oracle SQL Developer中自动编译所有标准格式的过程和函数(之后所有的过程和函数都具有相同的格式,就像手动按Ctrl + F7一样)?

cbeh67ev

cbeh67ev1#

我有很多程序和函数在一个模式在oracle SQL开发人员,我想知道如何编译所有的程序和函数
在“连接”视图中:

  • 展开与架构的连接
  • 右键单击“程序”(或“函数”)
  • 在弹出的上下文菜单中选择“编译全部”
  • 如果愿意,可以通过查看“SQL”选项卡来查看将要运行的PL/SQL块
  • 按“应用”按钮重新编译所有内容。

我想知道如何[拥有]所有标准格式的过程和函数
这与重新编译无关,你可以对代码应用任何格式规则(空格/大小写等),只要代码保持语法正确,就不会影响代码是否重新编译。
转到“工具”〉“首选项...”〉“数据库”〉“SQL格式化程序”和edit the appropriate formatting to your specification
然后右键单击过程/函数的代码and select "Format"(或按Ctrl + F7)。
您需要对每个过程和函数执行此操作,因为似乎没有SQL Developer选项可将其应用于方案中的所有对象。

siotufzp

siotufzp2#

或者,您可以使用引用程序的公共同义词,通过命令编译DB,创建和授权如下:

$ 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.
t30tvxxf

t30tvxxf3#

最好的方法是通过源代码管理来看待这个问题,希望真相的来源是一个颠覆或Git项目。
你可以用FORMAT命令把一个目录中的所有文件都输入到CLI中,然后它会遍历该文件夹中的每个文件,格式化代码,并将其写入提供的输出目录。
然后将这些文件签入源代码管理系统。

c:\Program Files\Oracle\sqldev\18.1\sqldeveloper\sqldeveloper\bin>sdcli format input=c:\users\jdsmith\unformatted output=c:\users\jdsmith\formatted
Command Completed.

所以在这里我从3个未格式化的文件到3个格式化的文件,如果我在前后打开同一个“对象”...

所有这些都很好,但是要知道,一旦其他开发人员 checkout 一个文件,他们会立即改变它的外观,由于个人喜好。我不确定我是否见过一个成功的“格式化规则”系统,每个人都同意格式化相同的代码。但是,格式化它,因为它在您的VCS似乎工作正常...也将有助于DIFF/Delta。
从理论上讲,您也可以编写一些js并使用SQLcl来获取每个对象,对其进行格式化,然后编译它。
我不喜欢编译对象而不先查看它们的想法,但这只是我的想法。

lkaoscv7

lkaoscv74#

oracle 19c/18c(已测试)中解决此问题的最佳方法是在DB服务器计算机上运行以下脚本:

SQL> @Oracle_home/rdbms/admin/utlrp.sql

参考文献的链接在这里。

相关问题