Oracle DBMS_METADATA.GET_DDL过程是否可以纠正不良缩进?
下面是获取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
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格式输入=
我可以想象构建以下批处理脚本/管道:
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)