最近一直在修改以前同事写的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;
分享到:
相关推荐
2. **代码格式化(Code Formatting)**: IntelliJ IDEA提供了强大的代码格式化功能,可以根据特定的代码风格规则自动调整代码布局。用户可以自定义格式化规则,包括缩进风格、空格使用、命名规范等。此外,IDE还...
@ transferwise /格式化 用法 数字格式 formatNumber仅用于格式化数字值和仅字母数字字符串。 如果要格式化与货币相关的金额,请使用formatAmount使用formatNumber 。 import { formatNumber } from '@transferwise...
在本场景中,我们关注的是使用C++来实现对可移动磁盘的格式化操作。"格式化"是一个术语,它指的是清理磁盘上的所有数据,并将其准备为新的存储用途。在Windows操作系统中,我们可以调用特定的API(应用程序接口)...
与高级格式化(High-Level Formatting,HLF)不同,低级格式化涉及到更底层的数据结构设置,包括磁道定位、扇区分配和错误校验等。这个过程通常由制造商完成,但有时用户也需要手动执行,例如处理有故障的硬盘或者...
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 ...
3. 格式化与对齐(Code Formatting): 保持代码整洁是提高可读性的重要因素。SQLPrompt允许用户快速格式化SQL脚本,自动对齐关键字、括号和注释,使得代码结构清晰,易于阅读和维护。 4. 性能提示(Performance ...
3. 确保“自动格式化”(Auto Formatting)选项被勾选,这将允许你在保存文件时自动格式化XML代码。 4. 如果需要自定义XML格式化规则,可以点击“格式化”(Format)按钮,设置缩进样式、空格数量等。 **FTL...
- 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. ...
低级格式化(Low-Level Formatting,LLF)是硬盘初始化的一种方法,与常见的高级格式化(High-Level Formatting,HLF)不同。低级格式化涉及到硬盘的物理层面,包括对磁道、扇区的划分以及建立硬盘的逻辑结构。这个...
在IT领域,尤其是在Web开发与数据交换中,XML(可扩展标记语言)作为一种重要的数据存储和传输标准,其格式化处理对于提升代码可读性、维护性和解析效率具有重要意义。本文将围绕“XML格式化(换行,缩进)”这一...
"source_formatting_utility"可能是指该代码格式化工具的源代码或可执行文件,用户可以通过下载并运行这个文件来使用或集成到自己的开发环境中。对于开发者来说,掌握并合理利用代码格式化工具是提升编程质量和效率...
- **Jedi Code Formatting (JCF)**:这是一个免费的代码格式化插件,可以自定义格式化规则。 4. **自定义代码格式化规则** 无论是使用IDE内置还是第三方工具,都可以根据个人或团队的编码规范来定制代码格式化...
与高级格式化(High-Level Formatting)不同,高级格式化是在低级格式化的基础上建立文件系统,如FAT、NTFS或EXT等,为用户提供文件存储的逻辑结构。 二、磁盘低级格式化的应用场景 1. 硬盘故障修复:当硬盘出现...
“Samsung_三星原厂低级格式化程序_PChome下载介绍.txt”可能是对工具的简介或使用指南,包含了具体的操作步骤和注意事项。“samsunghdd.zip”是压缩包文件,包含三星硬盘原厂低级格式化工具的可执行程序和其他可能...
低级格式化(Low-Level Formatting)与常规的格式化(High-Level Formatting)不同。高级格式化主要涉及文件系统的创建和分配表的建立,而低级格式化则是对存储介质进行更底层的初始化,包括划分磁道和扇区,设定每...
在计算机术语中,低级格式化(Low-Level Formatting,LLF)是对硬盘、闪存驱动器等存储设备进行的一种初始化过程。它将磁盘划分为多个逻辑单元(LUNs)或扇区,并创建必要的伺服信息,使操作系统能够读取和写入数据...
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 ...
2. 格式化(Formatting):在信息技术中,格式化是指将存储设备(如硬盘、固态硬盘、闪存盘等)进行组织,以便可以被操作系统识别和使用。对于机器人系统,格式化可能意味着需要重新安装操作系统或擦除所有的数据、...
在使用Visual Studio Code (VSCode) 进行C/C++开发时,官方的C/C++插件提供了一种方便的方式来格式化代码,即通过`.clang-format`配置文件自定义代码风格。然而,当尝试使用`clang-format -style=llvm -dump-config ...
与高级格式化(High-Level Formatting)不同,后者主要创建文件系统并分配簇大小,而低级格式化则更深入地影响硬盘的结构,包括建立伺服信息、划分磁道和扇区等。通常,新购买的硬盘已经由制造商预进行了低级格式化...