Oracle DBMS_METADATA.GET_DDL过程是否可以纠正不良缩进?

Oracle DBMS_METADATA.GET_DDL过程是否可以纠正不良缩进?,oracle,schema,Oracle,Schema,下面是获取DDL或过程并使其美观的命令: EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM , 'PRETTY' , TRUE); SELECT DBMS_METADATA.GET_DDL('PROCEDURE', UPPER('LOOPPROC'), 'MYSCHEMA') FROM DUAL; 这是一个与输入完全相同的输出,就像上面将PRETTY设置为FALSE一样 CREATE OR REPL

下面是获取DDL或过程并使其美观的命令:

EXEC DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM , 'PRETTY' , TRUE);
SELECT DBMS_METADATA.GET_DDL('PROCEDURE', UPPER('LOOPPROC'), 'MYSCHEMA') FROM DUAL;
这是一个与输入完全相同的输出,就像上面将PRETTY设置为FALSE一样

  CREATE OR REPLACE EDITIONABLE PROCEDURE "MYLANID"."LOOPPROC" (inval NUMBER) 

IS

  tmpvar   NUMBER;
  tmpvar2   NUMBER;
  total     NUMBER;

BEGIN

  tmpvar := 0;
  tmpvar2 := 0;
  total := 0;

  FOR lcv IN 1 .. inval

  LOOP

      total := 2 * total + 1 - tmpvar2;
      tmpvar2 := tmpvar;
      tmpvar := total;

  END LOOP;

  IF inval = 1 THEN
                        DBMS_OUTPUT.put_line ('IN IF TRUE branch, inval = ' || inval);
DBMS_OUTPUT.put_line ('IN IF TRUE branch, inval is still = ' || inval);
  ELSE
     DBMS_OUTPUT.put_line ('IN ELSE, inval = ' || inval);
  END IF;
   

  DBMS_OUTPUT.put_line ('TOTAL IS: ' || total);

END loopproc;
注意IF-the-ELSE子句是如何像Snake-River一样缩进的

有没有一种方法可以让程序更加常规地缩进

我也对可以从.net调用的开源开放。我正在考虑使用Selenium作为最后手段,以利用执行sql格式设置的免费网站,但这只是最后手段

想法:SQLDeveloper已经内置并允许设置多个选项

然后使用::

对于某些操作,可以从命令行调用SQLDeveloper,作为图形用户界面的替代。要使用命令行界面,请转到安装SQL Developer的位置下的sqldeveloper\sqldeveloper\bin文件夹或sqldeveloper/sqldeveloper/bin目录,然后输入sdcli

C:\sqldeveloper\sqldeveloper\bin>sdcli
可用功能:

格式化:格式化任务

调用:

 sdcli format input=<here goes file>
sdcli格式输入=
我可以想象构建以下批处理脚本/管道:

  • 从Oracle获取对象定义
  • 另存为文件
  • 使用
    sdcli格式
  • 读回文件内容

  • 卢卡斯,这看起来很有效,符合我的目的。我怀疑这可能比让数据库进行格式化要慢,我(在Oracle中)有点失望,因为PRETTY选项似乎不起作用,但我很高兴您指出了这个功能。谢谢你,先生!当它工作时,它非常非常慢。格式化一个1200行的包大约需要20秒。@Chad 20s对于一个文件来说是相当多的时间,特别是当它必须是CI管道的一部分时。我想这是因为启动SQL Developer的开销。通过提供
    input=folder
    或两个文件夹
    input=folder1 output=folder2
    一次执行所有文件可能会更快。谢谢Lukasz,我正打算尝试同样的方法,但当IU看到你的帖子时,尝试了一下。对于大量文件,性能相当好。问题是,我开发了一个UI,允许用户查询db对象,获取每个测试和产品环境的DDL(大约有7个环境),然后格式化和比较DDL。在7个环境中。获取DDL的速度非常快,但对于不需要格式化的UI事务来说,等待20秒以启动SQL Discover来完成它的工作相当慢。(我在单独的线程上获取所有环境的DDL)