`
bianxq
  • 浏览: 91590 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

[译] PL/SQL 格式化指南 (PL/SQL Formatting Guide)

阅读更多

最近一直在修改以前同事写的Oracle存储过程,由于编码不规范,修改起来相当费神,于是乎,翻译了这篇 PL/SQL Formatting Guide (Oracle PL/ SQL by Example,Appendix A),费了九牛二虎之力,终于翻译完了,也终于知道自己的英语有多烂了,呜呜。

声明:原创翻译,不足之处请多多指正,转载请注明出处!

一、大小写

就像在SQL中一样,PL / SQL中是不区分大小写的。其一般准则如下:

  • 关键字(BEGIN, EXCEPTION, END, IF THEN ELSE,LOOP, END LOOP)、数据类型(VARCHAR2, NUMBER)、内部函数(LEAST, SUBSTR)和用户定义的子程序(procedures, functions,packages),使用大写。
  • 变量名以及SQL中的列名和表名,使用小写。

二、空白

空白(空行和空格)在PL/SQL中如同在SQL中一样重要,因为它是提高代码可读性的一个重要因素。换句话说,可以通过在代码中使用缩进来体现程序的逻辑结构。以下是一些建议:

  • 在等号或比较操作符的左右各留一个空格;
  • 结构词(DECLARE, BEGIN, EXCEPTION, END,IF 和 END IF, LOOP 和 END LOOP)居左排列。另外,结构中的嵌套结构要缩进三个空格(使用空格键,而不是Tab键);
  • 主要代码段之间用空行隔开;
  • 把同一结构的不同逻辑部分分开写在独立的行,即使这个结构很短。例如,IF和THEN被放在同一行,而ELSE 和END IF则放在独立的行。

三、命名约定

使用以下前缀对于避免与关键字和表名列名相冲突是很有帮助的:

  • v_变量名
  • con_常量名
  • i_输入参数名,o_输出参数名,io_输入输出参数名
  • c_游标名 或者 游标名_cur
  • rc_ Ref Cursor
  • r_Record名 或者 Record名_rec
  • FOR r_stud IN c_stud LOOP…
  • FOR stud_rec IN stud_cur LOOP
  • type_名称,名称_type (用户定义的类型)
  • t_表名,表名_tab (PL/SQL 表)
  • rec_Record名,Record名_rec (Record变量)
  • e_异常名 (用户定义的异常)

包的名称应该描述包内的存储过程和函数主要所完成的功能

存储过程的名称应该描述该存储过程所执行的动作

函数的名称应该描述所返回的变量

例如:

 

PACKAGE student_admin
-- admin 后缀可能是用于表示管理功能.
PROCEDURE remove_student (i_student_id IN student.studid%TYPE);
 
FUNCTION student_enroll_count (i_student_id student.studid%TYPE)
RETURN INTEGER;

四、注释

PL/SQL中的注释如同SQL中的注释一样重要。他们应该解释程序的主要部分和所有关键的逻辑步骤。

使用单行注释(–)而不是多行注释(/*)。即使PL/SQL对这些注释做同样处理,这样在代码完成后进行调试也会容易些,因为你不能在多行注释中嵌入多行注释。换句话说,单行注释代码中可以部分取消注释,而在多行注释代码中则不行。

五、其他的建议

对于PL/SQL中嵌入的SQL声明,使用相同的格式化指南来决定这些声明应该如何在代码块中出现

提供一个头部注释,用于说明代码块的用途并列出创建日期和作者名字。并且每个修订版都要有一行注释,包含作者名、日期和修订版描述。

例如:下面的这个示例体现了上述建议。请注意该示例还使用了等宽字体(Courier New),因为每个字体占据同等宽度可以使格式化更加简便。等比例空格字体会隐藏空格使得行间对齐比较困难。多数文本和程序编辑器默认使用等宽字体。

REM ********************************************************
REM * 文件名:coursediscount01.SQL
REM * 版本:1
REM * 用途:对于至少有一部分超过十个学生登记的课程给予折扣
REM * 参数:无
REM *
REM * 作者:s.tashi  时间:2000.1.1
REM * 修改者:y.sonam 时间:2000.2.1
REM * 描述:修正游标,添加缩进和注释。
REM ********************************************************
DECLARE
   -- C_DISCOUNT_COURSE 找出那些至少有一部分超过十个学生登记的课程
   CURSOR c_discount_course IS
      SELECT DISTINCT course_no
      FROM section sect
      WHERE 10 <= (SELECT COUNT(*)
                    FROM enrollment enr
                   WHERE enr.section_id = sect.section_id
                   );
   -- 费用超过 $2000.00的课程的折扣率
   con_discount_2000 CONSTANT NUMBER := .90;
   -- 费用在$1001.00和$2000.00之间的课程的折扣率
   con_discount_other CONSTANT NUMBER := .95;
 
   v_current_course_cost course.cost%TYPE;
   v_discount_all NUMBER;
   e_update_is_problematic EXCEPTION;
BEGIN
   -- 对于那些要打折的课程, 确定当前费用和新的费用
   FOR r_discount_course IN c_discount_course LOOP
       SELECT cost
       INTO v_current_course_cost
       FROM course
       WHERE course_no = r_discount_course.course_no;
 
       IF v_current_course_cost > 2000 THEN
          v_discount_all := con_discount_2000;
       ELSE
          IF v_current_course_cost > 1000 THEN
             v_discount_all := con_discount_other;
          ELSE
             v_discount_all := 1;
          END IF;
       END IF;
 
       BEGIN
          UPDATE course
          SET cost = cost * v_discount_all
          WHERE course_no = r_discount_course.course_no;
       EXCEPTION
          WHEN OTHERS THEN
             RAISE e_update_is_problematic;
       END; -- 更新记录的子代码块结束
 
   END LOOP;-- 主循环结束
 
   COMMIT;
 
EXCEPTION
   WHEN e_update_is_problematic THEN
   -- 事务回滚
   ROLLBACK;
   DBMS_OUTPUT.PUT_LINE
      ('There was a problem updating a course cost.');
   WHEN OTHERS THEN
      NULL;
END;
分享到:
评论

相关推荐

    Oracle PL/SQL programming(5th Edition)

    Get PL/SQL programs up and running quickly, with clear instructions for executing, tracing, testing, debugging, and managing PL/SQL code Optimize PL/SQL performance with the aid of a brand-new ...

    formatting:VanillaJS库用于格式化不同的事物

    @ transferwise /格式化 用法 数字格式 formatNumber仅用于格式化数字值和仅字母数字字符串。 如果要格式化与货币相关的金额,请使用formatAmount使用formatNumber 。 import { formatNumber } from '@transferwise...

    SQLPrompt_9.5.0.9311破解版

    What's new in SQL Prompt SQL Prompt is now supported in SQL Server Management Studio 18! SQL Prompt is now supported in Visual Studio 2019! SQL Prompt now requires .Net Framework 4.7.2 or later. You ...

    Oracle sqldeveloper without jdk (win+linux)

    - Bug # 4918539: ORA-ORA-06502 or ORA-01460 may occurs if a procedure is executed through the Run PL/SQL dialog box and a string with multibyte characters is assigned to one of the parameters. ...

    vscode使用官方C/C++插件无法进行代码格式化问题

    官方的C/C++插件是支持使用.clang-format配置文件进行自定义风格代码格式化的,无需另外安装clang-format插件。 但是使用clang-format -style=llvm -dump-config > .clang-format导出的默认配置文件进行格式化的时候...

    SQLPrompt_7.4.1.603

    SQL Prompt 7.4.1 Major features Support for SQL Server Management Studio 17 Formatting improvements: Improvements to begin/end formatting Improvements to nested parentheses Case statements with ...

    SQLPrompt_7.4.0.471

    Formatting improvements: Improvements to nested parentheses Case statements with comments now align correctly Now adds a space before aliases following function calls (forum) Added "Place BEGIN ...

    uroboroSQL格式化程序:美丽SQL格式化程序

    uroboroSQL格式化程序SublimeText3 IntelliJ 蚀 uroboroSQL格式化程序,SQLコーディング规约に従い,SQL文を整形するツールです。 SQL文のインデント,改行,大文字・小文字の区分などを即时変换し,可読性・管理性...

    SQLPrompt_7.5.1.1000

    Latest version 7.5.1.1000 Released 4/11/2017 SQL Prompt 7.5.1.1000 This build of SQL Prompt includes these improvements: ...Formatting improvements See the full release notes for full details

    oracle advanced sql 高级SQL教程 ORACLE官方教材

    Formatting Hierarchical Reports Using LEVEL and LPAD 5-11 Pruning Branches 5-13 Summary 5-14 Practice 5 Overview 5-15 6 Oracle9i Extensions to DML and DDL Statements Objectives 6-2 Review of the ...

    Android和XML代码格式化

    Eclipse 中: 配置方法: window->preferences->java->Code style->Formatter中导入android-formatting.xml ...XML格式化: http://www.androidpolice.com/2009/11/04/auto-formatting-android-xml-files-with-eclipse/

    SQL Prompt 7.3.0.437 破解版 带注册机

    Improved SQL formatting The formatting feature is now more customisable More options for: CASE (UserVoice) JOIN (UserVoice) CTEs (UserVoice) CREATE statements IN expressions And many more You can now ...

    SQL Prompt 7.3.0.437(含注册机)

    Improved SQL formatting The formatting feature is now more customisable More options for: CASE (UserVoice) JOIN (UserVoice) CTEs (UserVoice) CREATE statements IN expressions And many more You can now ...

    最完整的Toad For Oracle使用手册

    Viewing Source Surrounding a PL/SQL Error 863 Dataset Operations 864 Data Grids 866 DBMS Output 881 Finding Data 883 Generate Test Data 890 Working with Database Objects 896 Schema Browser Overview ...

    SQLPrompt_7.3.0.775

    Improved SQL formatting The formatting feature is now more customisable More options for: CASE (UserVoice) JOIN (UserVoice) CTEs (UserVoice) CREATE statements IN expressions And many more (UserVoice, ...

    sqlformat:SqlFormatter 库的 CLI 改编

    SQL 格式 这是库的 CLI 改编。 就像基本的,但有更多选项。 安装 安装 — 在上有更多信息 构建 PHAR: box build 移动到你的路径 - 例如。 mv sqlformat.phar /usr/local/bin/sqlformat 用法 Usage: $basename [-...

    JSTL标签-讲解及实例

    JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如...Database access (SQL) http://java.sun.com/jstl/sql sql <sql:tagname ...>

    DevArt dbForge Studio for SQL Server Enterprise Edition 5.0.337

    SQL formatting — to follow common coding style (standard). SQL snippets — to save time storing and reusing repeated code fragments. Quick object information — to show hints with info on database ...

    SQL Prompt_9.1.4.4532破解版

    This build of SQL Prompt includes these improvements: Added refactoring option to prefix 'N' to literal strings when assigning to a unicode NCHAR/NVARCHAR variable. Found under Prompt -> Options ->...

    address-formatting, 设置地理地址格式的模板.zip

    address-formatting, 设置地理地址格式的模板 电子邮件地址格式一个快速示例给定一组地址部件 house_number: 17 road: Rue du Médecin-Colonel Calbairac neighbourhood: Lafourguet

Global site tag (gtag.js) - Google Analytics