暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片
Oracle存储过程开发规范与技巧.doc
764
37页
59次
2024-11-21
5墨值下载
存储过程开发规范与技巧
开发规范
1.
书写规范
1):程序头书写规范
程序头开部分应说明程序整体的功能,存储过程名称,编写人,编写日期,修改人
修改日期,版本号以及过程涉及的表和视图。示例如下:

/*
名称及实现功能
:
版本
: (
版本号标示:新建
V1.0.0
小的修改变为
V1.0.1
大的修改
V1.1.0
重构
V2.0.0)
Create by *** Create Date 2006-06-29
Update by *** update Date 2006-06-30
修改原因
:
Update by *** update Date 2006-06-31
修改原因
:
涉及的表或视图:
dump_init
辅助表
(DM)
:记录存储过程中使用的物化视图日志序号
mlog$_acrcusmrsecindex
源表
(ODS)
:客户第一索引物化视图日志
,
使用同义词
ft_gld_customerdata
目标表
(DM)
:客户事实表
*/
CREATE OR REPLACE PROCEDURE *******
------------------------------------------------------------------------------
2):代码书写规范

句中的所名、名全写,保留内置名、

留字大写。

连接符



、以及=、


等前后加上一个空格。
 
子句书写时,每个条件占一行,语句令起一行时,以保留字或者连接
开始,连接符右对齐。

查询的

过滤,原则应使过滤记录数最多的条件放在最前面。

多表连接时,使用表的别名来引用列。

查找数据库表或视图时,只能取出确实需要的那些字段,不要使用
来代替所有
列名。

功能相似的过程和函数,尽量写到同一个包中,加强管理。
示例如下:
BEGIN

查询员工及对应的部门名称
SELECT emp.name, dept.name
FROM l_dept dept, l_employee emp
WHERE emp.dept_id = dept.dept_id;
END;
3)注释书写规范
为了提高可读性,应该使用一定数量的注释。注释大约占总行数的 1/5
1:注释风格:注释单独成行、放在语句前面。
2:应对不易理解的分支条件表达式加注释;
3:对重要的计算应说明其功能;
4:过长的函数实现,应将其语句按实现的功能分段加以概括性说明;
5:每条 SQL 语句均应有注释说明
6:对于程的整功能,应程序始部分说,可用单/多行释。-- /* */
方式)
2.
命名规范
命名对象 规则 样例
存储过程、包、方
1
业务相关以模块代码开头
gld_assist_check_p
2
如果区分全量和增量,在最后加标识
gld_load_to_etl
gld_load_to_etl_full
3
全局使用,以
global
开头
global_procedure_check
变量
v
开头
v_updatemode1
游标
c
开头
c_tablist
内存表
m
开头
m_table1
临时表
t
开头
t_tmpTable
存储过程技术
1
.存储过程样例
CREATE OR REPLACE PROCEDURE example (
v_input IN NUMBER, --
输入参数
v_output OUT NUMBER --
输出参数
)
IS
PRAGMA AUTONOMOUS_TRANSACTION;
CURSOR c1 --
定义一个游标,在
begin
之前
IS
SELECT b.tablename mlogtable,
MAX (remarks)KEEP (DENSE_RANK LAST ORDER BY starttime)
remarks
FROM proc_log a, table_proc b
WHERE TO_CHAR (starttime, 'yyyy-mm-dd') <= --
转换时间并做比较
TO_CHAR ( SYSDATE - TO_DSINTERVAL (
TO_CHAR (intervaldays) || ' 00:00:00'), 'yyyy-mm-dd' )
AND a.remarks LIKE 'SUCCEEDED:%'
AND a.procedurename = b.procedurename
GROUP BY b.tablename); --
定义结束
c1_rec c1%ROWTYPE; --
定义接受游标数据行的
ROWTYPE
v_mlogtable VARCHAR (30);
v_postperiod CHAR (2);
v_acctbalbeginseq NUMBER;
v_systime DATE;
BEGIN
v_input := 0; --
变量赋值
v_systime := SYSDATE;
OPEN c1; --
打开游标
LOOP --
循环
FETCH c1 INTO c1_rec; --
从当前游标行赋值
c1_rec
EXIT WHEN c1%NOTFOUND; --
游标没有数据退出
v_mlogtable := c1_rec.mlogtable; --
从行取出具体数据赋给变量
CASE TRIM (LOWER (v_mlogtable)) --CASE
起始
WHEN 'String1' --
当条件一
THEN --
做条件一工作
BEGIN
v_remarks := REPLACE (v_remarks, 'AA');
END;
WHEN 'String2' --
当条件二
THEN
BEGIN
END;
ELSE --
其他条件
NULL;
END CASE; --CASE
结束
of 37
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。