我在oracle SQL开发人员的架构中有很多过程和函数, 我想知道如何用oracle SQL开发人员自动编译标准格式的所有过程和函数(之后它们都具有相同的格式,比如手动按Ctrl + F7)?
答案 0 :(得分:3)
我在oracle SQL开发人员的架构中有很多程序和函数,我想知道如何编译所有的程序和函数
在" Connections"视图:
我想知道如何[拥有]标准格式的所有程序和功能
这与(重新)编译无关。您可以将任何格式(空格/大小写等)规则应用于代码,只要代码在语法上保持正确,就不会影响代码是否重新编译。
转到"工具" > "首..." > "数据库" > " SQL Formatter"和edit the appropriate formatting to your specification。
然后右键单击程序&s / function的代码and select "Format"(或按 Ctrl + F7 )。
您需要为每个过程和函数执行此操作,因为似乎没有SQL Developer选项将其应用于架构中的所有对象。
答案 1 :(得分:1)
或者,您可以使用公共同义词来引用通过以下命令创建和授权的命令来通过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.
答案 2 :(得分:0)
查看此问题的“最佳”方法是通过源代码控制,希望真相的来源是Subversion或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个已格式化的文件,并且如果我在打开之前和之后打开相同的“对象” ...
这一切都很好,但是知道其他开发人员签出文件后,他们会根据个人喜好立即更改文件的外观。我不确定我是否见过成功的“格式化规则”系统,每个人都同意将代码格式化相同。但是,在VCS中对其进行格式化似乎可以正常工作……而且还有助于DIFF / Delta。
理论上,您还可以编写一些js并使用SQLcl捕获每个对象,对其进行格式化,然后对其进行编译。 Some examples are here。
我不喜欢先不看对象就编译对象的想法,但这就是我。