问题描述
这是获取 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 子句是如何像蛇河一样缩进的。
有没有办法让程序更传统地缩进?
解决方法
我也对可以从 .net 调用的开源开放。我正在考虑作为最后的手段使用 Selenium 来利用执行 sql 格式的免费网站,但只是作为最后的手段。
想法:SQL Developer 已经内置了 formatting capabilities 并允许设置多个选项。
然后使用:Command-Line Interface for SQL Developer:
对于某些操作,您可以从命令行调用 SQL Developer 作为图形用户界面的替代方法。要使用命令行界面,请转到 SQL Developer 安装位置下的 sqldeveloper\sqldeveloper\bin 文件夹或 sqldeveloper/sqldeveloper/bin 目录,然后输入 sdcli。
C:\sqldeveloper\sqldeveloper\bin>sdcli
可用功能:
格式:格式任务
调用:
sdcli format input=<here goes file>
我可以想象构建以下批处理脚本/管道:
- 从 Oracle 获取对象定义
- 另存为文件
- 使用
sdcli format
- 读回文件内容