剑破冰山:Oracle开发艺术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 书写规范

丑陋的书写规范不仅可读性较差,而且给人以敬而远之的感觉,就算你是大侠也不行;而良好的书写规范则给人以享受和艺术的体验。

1.2.1 大小写风格

规则1.2.1.1

所有数据库关键字和保留字均使用大写;关于字段、变量的大小写风格在1.4节详细介绍。

1.2.2 缩进风格

规则1.2.2.1

程序块严格采用缩进风格书写,保证代码清晰易读,风格一致,缩进格数统一为2/4个。

必须使用空格,不允许使用【Tab】键。以免在用不同的编辑器阅读程序时,因【Tab】键所设置的空格数目不同而造成程序布局不整齐。

规则1.2.2.2

当同一条语句需要占用多于一行时,每行的其他关键字与第一行的关键字进行右对齐。

    IF flag=1 THEN
      SELECT username             --同上一行相比缩进4个空格
        INTO vuserinfo            --INTO与SELECT进行右对齐
        FROM userinfo             --FROM与SELECT进行右对齐
        WHERE userid=:iuserid;     --WHERE与SELECT进行右对齐
    END IF;

1.2.3 空格及换行

规则1.2.3.1

不允许把多个语句写在一行中,即一行只写一条语句。

规则1.2.3.2

避免将复杂的SQL语句写到同一行,建议要在关键字和谓词处换行。

规则1.2.3.3

相对独立的程序块之间必须加空行。

BEGIN、END独立成行。

规则1.2.3.4

太长的表达式应在低优先级操作符处换行,操作符或关键字放在新行之首。划分出新行应当适当地缩进,使排列整齐,语句可读。

当不同类型的操作符混合使用时,建议使用括号进行隔离,以使代码清晰。

规则1.2.3.5

减少控制语句的检查次数,例如,在IF…ELSE控制语句中,应将最常用的符合条件前置以被检查到。

        DECLARE
          --定义局部变量
          vFlag VARCHAR2(10);  --判断标志
          …
        BEGIN
          IF ((a=b AND a=c AND a=d) OR  --在OR处断行,可使得逻辑更为清晰
              (a=e AND e=f)) THEN
        --Process something
          IF vFlag=1 THEN      --vFlag=1为经常出现的条件,可有效减少判断检查次数
        --Process something
          ELSIF vFlag=2 THEN  --vFlag=2为次之出现的条件
        --Process something
          ELSE
          --Process something
          END IF;

1.2.4 其他

规则1.2.4.1

避免使用SELECT * 语句;不要用*来代替所有字段,应给出字段列表,以避免在表结构发生变化时应用程序出现无法识别的情况。

规则1.2.4.2

INSERT语句必须给出字段列表,以避免在表结构发生变化时发生编译错误。

规则1.2.4.3

当一个PL/SQL或SQL语句中涉及多个表时,始终使用别名来限定表名和字段名,这使其他人阅读起来更方便,避免了含义模糊的引用,并能够在别名中清晰地判断出表名和相关字段名。

规则1.2.4.4

确保变量和参数在类型和长度上与表数据列相匹配。如果与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常。

    DECLARE
      --定义相关表字段变量
      vDeptNo      salary.Deptno%type;     --not VARCHAR2(10),以适应变化
      vEmployeeNo  salary.EmployeeNo%type; --not VARCHAR2(10),以适应变化
      vSalary      salary.Salary%type;     --not NUMBER,以适应变化
    BEGIN
      --Process something
    END;