更新时间:2024-11-05 GMT+08:00
GaussDB(DWS) PL/pgSQL使用规则
总体开发原则
- 应完全按照设计文档进行开发。
- 程序模块应做到高内聚低耦合。
- 应有正确、全面的故障对策。
- 程序编写应做到结构合理,条理清晰。
- 程序名称命名应按照统一的命名规则进行命名。
- 应充分考虑程序的运行效率,包括程序的执行效率和数据库的查询、存储效率,在保证应用的同时应使用效率高的处理方法。
- 程序注释应详细、正确、规范。
- 除非应用特别需要控制COMMIT和ROLLBACK的提交时机,否则应在存储过程结束时执行显式的COMMIT或者ROLLBACK操作。
- 程序处理应支持7*24小时;对于程序中断,应用程序应提供安全、简单的断点再续处理。
- 应提供标准、简单的应用输出,为应用维护人员提供明确的进度显示、错误描述和运行结果;为业务人员提供明确、直观的报表、凭证输出。
程序编写原则
- 在PL/pgSQL中的SQL语句宜使用绑定变量。
- 在PL/pgSQL中的SQL语句宜使用RETURNING子句。
- 存储过程使用原则:
- 对于单个存储过程中varchar或者varchar2类型输出参数个数不应超过50个。
- 不应使用long类型作为输入或输出参数。
- 对于大小超过10MB的字符串类型输出,应使用CLOB类型。
- 变量声明原则:
- 变量声明时,如果含义和应用表某字段含义或某变量相同时,应使用%TYPE声明。
- 记录声明时,如果含义和某应用表行数据相同时,应使用%ROWTYPE声明。
- 变量声明每行应只包含一条语句。
- 不应声明LONG类型的变量。
- 游标使用类型:
- 显式游标使用后应关闭。
- 游标变量使用后应关闭。若游标变量需要传递数据给调用的应用程序,应在应用程序中关闭游标;若游标变量仅在存储过程中使用,应显式关闭游标。
- 在使用DBMS_SQL.CLOSE_CURSOR关闭游标前,应使用DBMS_SQL.IS_OPEN判断游标是否已打开。
- 集合使用原则:引用集合中的元素时宜使用FORALL语句,不宜使用FOR循环语句。
- 动态语句使用原则:
- 联机系统的交易程序不宜使用动态SQL。
- PL/pgSQL中要实现DDL语句和系统控制命令,可使用动态SQL。
- 尽量使用变量绑定。
- 拼装SQL的使用原则:
- 拼装SQL宜使用绑定变量。
- 拼装SQL语句的条件如果有外部输入源,应对输入条件进行字符检查,防止攻击。
- 在PL/pgSQL脚本中,单行代码的长度,不宜超过2499字符。
- Trigger使用原则:
- Trigger可用于实现差量数据日志等与业务处理无关的可用性设计场景。
- 不应使用Trigger实现业务处理相关功能。
异常处理原则
任何在PL/pgSQL函数中发生的错误都会中止该函数的执行,实际上还会中止其周围的事务。可以使用带有EXCEPTION子句的BEGIN块捕获错误并且从中恢复。
- 在使用PL/pgSQL块中,如果使用了不能返回确定结果的SQL语句,应在EXCEPTION子句中对程序可能出现的异常进行处理,避免出现未处理的异常被传递到外层块,导致程序逻辑错误。
- 对于系统已经定义的异常,可以直接使用。DWS暂不支持自定义异常。
- 进入和退出一个包含EXCEPTION子句的块要比不包含EXCEPTION子句的块开销大的多。因此,非必要场景不使用EXCEPTION。
书写规范
- 变量命名规则:
- 过程、函数的输入参数格式宜为:IN_参数名,参数名宜使用大写。
- 过程、函数的输出参数格式宜为:OUT_参数名,参数名宜使用大写。
- 过程、函数的输入输出参数格式宜为:IO_参数名,参数名宜使用大写。
- 过程、函数的程序中用到的变量宜由v_变量名组成,变量名宜使用小写。
- 将查询语句做成字符串拼接时,where语句的拼接变量名宜统一为v_where,select语句的拼接变量名宜为v_select。
- 记录(RECORD)的类型(TYPE)命名宜由T+变量名组成,名称宜使用大写。
- 游标命名宜由CUR+变量名组成,名称宜使用大写。
- 引用游标(REF CURSOR)的命名宜由REF+变量名组成,名称宜使用大写。
- 变量类型定义:
- 变量类型声明时,如果其含义和应用表某字段含义相同时,应使用%TYPE声明。
- 记录类型声明时,如果其含义和某应用表行数据相同时,应使用%ROWTYPE声明。
- 注释规范:
- 注释应该是有意义的,而不只是重述代码。
- 注释应简洁、易懂,以中文为主。为了表达准确,名词或操作上也可以使用英文。
- 应在每个存储过程、函数的开始加入注释,注释内容应包括:本程序的简要功能描述、编写者、编写日期、程序版本号信息和程序变更信息,同时各存储过程开头注释应保持统一格式。
- 应在输入输出参数的旁边添加注释,注明变量的意义。
- 应在每个块或大分支的开始添加注释,描述块的简要功能,若使用算法,应添加注释简单描述算法的目的和结果。
- 变量声明格式:
- 大小写规范:
- 缩进规范:
- 语句详述:
- 变量定义语句。每行应只包含一条语句。
- 同一层的IF、ELSEIF、ELSE和END关键字应开始于同一列,执行语句缩进。
- CASE和END关键字应位于同一列,WHEN和ELSE关键字应缩进。
- 同一层的LOOP和END LOOP关键字应位于同一列,层内语句或嵌套应依次缩进。
父主题: GaussDB(DWS)开发设计规范