且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

[20150304]关于sql格式化问题.txt

更新时间:2022-09-13 10:31:54

[20150304]关于sql格式化问题.txt

--今天看书学习了sql格式化技巧。

--我以前遇到的sql语句很长,喜欢抽取在toad下格式化。一般格式化成如下。

SELECT empno,
       ename,
       job,
       mgr,
       hiredate,
       sal,
       comm,
       deptno
  FROM emp
WHERE hiredate = TO_DATE ( :b1, 'yyyy-mm-dd');

--这样的问题假设要取消不显示hiredate,一般修改如下:

SELECT empno,
       ename,
       job,
       mgr,
       --hiredate,
       sal,
       comm,
       deptno
  FROM emp
WHERE hiredate = TO_DATE ( :b1, 'yyyy-mm-dd');

--这种方式注解最后一个字段就有问题。
SELECT empno,
       ename,
       job,
       mgr,
       hiredate,
       sal,
       comm ,
       --deptno
  FROM emp
WHERE hiredate = TO_DATE ( :b1, 'yyyy-mm-dd');

--今天看书以及blog,才明白逗号在前面这样注解更加科学,实际上许多人都是这种模式。因为一般前面第1个字段很少选择注解。

SELECT empno
      ,ename
      ,job
      ,mgr
      ,hiredate
      ,sal
      ,comm
--    ,deptno
  FROM emp
WHERE hiredate = TO_DATE ( :b1, 'yyyy-mm-dd')


--这样注解最后1个字段就没有问题。

toad下如下修改呢?
view =>toad options ... => formatter
oracle formatter options=>List Arrangements=>, commas ,选择Leading风格就ok了。

如果select显示少于等于3个字段,显示如下:
SELECT empno, ename, job
  FROM emp
WHERE hiredate = TO_DATE ( :b1, 'yyyy-mm-dd')
 
--如果也想像上面这样,还可以修改参数
view =>toad options ... => formatter
oracle formatter options=>List Arrangements=>List Defaults ,List item的column修改为1。

但是这样的格式化如下:
SELECT empno
      ,ename
      ,job
  FROM emp
WHERE hiredate = TO_DATE ( :b1
                          ,'yyyy-mm-dd');

--我的建议还是保持不动。 List item的column修改为3。 (修改为2,也可以避免to_date折行)

SELECT empno, ename, job
  FROM emp
WHERE hiredate = TO_DATE ( :b1, 'yyyy-mm-dd');


另外把parentheses选择6.这样也是上面的原则:

/* Formatted on 2015/3/4 12:13:37 (QP5 v5.252.13127.32867) */
BEGIN
   SYS.DBMS_STATS.GATHER_TABLE_STATS
   (
      OwnName            => 'SCOTT'
     ,TabName            => 'DEPT'
     ,Estimate_Percent   => NULL
     ,Method_Opt         => 'FOR ALL COLUMNS SIZE 1 '
     ,Degree             => 4
     ,Cascade            => TRUE
     ,No_Invalidate      => FALSE
   );
END;
/