Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/sbboke.com/wp-content/plugins/wordpress-seo/src/integrations/front-end-integration.php:409) in /www/wwwroot/sbboke.com/wp-content/themes/pacify/content-single.php on line 5

存储过程书写规范

规则1:不允许将多行语句书写在同一行;
示例
如下代码不符合规范(将两行定义书写在同一行)
SET v_count = 1; SET v_creation_date = CURRENT_DATE;

如下代码符合规范
SET v_count = 1;
SET v_creation_date = CURRENT_DATE;

规则2:相对独立的程序块之间应加空行;
示例
如下代码不符合规范(变量定义和程序段之间无空行)
SET v_duty_id = 1;
IF (v_disabled_date >  v_current_date) THEN
    SELECT duty_name
    into v_duty_name
    FROM sm_duty
    WHERE duty_id = :duty_id;
    …
END IF;
如下代码符合规范
SET v_duty_id = 1;

IF (v_disabled_date >  v_current_date) THEN
    SELECT duty_name
    into v_duty_name
    FROM sm_duty
    WHERE duty_id = :duty_id;
    …
END IF;

规则3:当一个SQL 语句中涉及到多个表时,始终使用别名来限定字段名,这使其它人阅读起来更方便,避免了含义模糊的引用,其中能够通过别名清晰地判断出表名;
说明 : 别名命名时,尽量避免使用无意义的代号a、b 、c… , 而应该有意义( 如表mtl_system_items_b 对应别名为msi,po_headers_all 别名对应为pha)。
示例
如下语句不符合规范(未使用有明确含义的表别名)
SELECT a.wip_entity_name, a.wip_entity_id, a.date_released
FROM wip.wip_entities b,
wip.wip_discrete_jobs a
WHERE b.wip_entity_id = a.wip_entity_id
AND a.status_type = 3

如下语句符合规范
SELECT wdj.we_entity_name, wdj.wip_entity_id, wdj.date_released
FROM wip.wip_entities we,
           wip.wip_discrete_jobs wdj
WHERE we.wip_entity_id = wdj.wip_entity_id
AND we.status_type = 3

规则4:确保变量/参数的类型和长度与表数据字段的类型和长度相匹配;
说明:如果与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常。
示例
如下代码不符合规范(假定表wap_user的字段user_name的定义为VARCHAR(10))
CREATE PROCEDURE ps_add()
BEGIN
      DECLARE v_user_name VARCHAR(15); 
      UPDATE wap_user
      SET user_name = v_user_name
      WHERE sky_id = 100;
END;
如下代码符合规范
CREATE PROCEDURE ps_add()
BEGIN
      DECLARE v_user_name VARCHAR(10); 
      UPDATE wap_user
      SET user_name = v_user_name
      WHERE sky_id = 100;
END;

规则5:存储过程代码块必须有注释;

建议1:减少控制语句的判断次数,比如在ELSE(IF…ELSE)语句中,尽量将尽快能检测到结果的判断放在前面;
示例
如下语句不符合规范(假定v_count=1的条件大多数情况会满足)
IF (v_count = 0) THEN
    NULL;
ELSEIF (v_count = 1) THEN
    NULL;
END IF;

如下语句符合规范(假定v_count=1的条件大多数情况会满足)
IF (v_count = 1) THEN
    NULL;
ELSEIF (v_count = 0) THEN
    NULL;
END IF;

建议2:尽量避免使用嵌套的IF语句,在这种情况下应使用多个IF语句来判断其可能性;
示例
如下语句不符合规范(使用了嵌套的IF语句来进行判定)
IF v_count = 0 THEN
    IF v_flag = 0 THEN
        NULL;
    ELSE
        NULL;
    END IF;
ELSE v_count = 1 THEN
    IF v_flag = 0 THEN
        NULL;
    ELSE
        NULL;
    END IF;
END IF;

如下语句符合规范
IF (v_count = 0) AND (v_flag = 0) THEN
    NULL;
ELSEIF (v_count = 0 ) AND (v_flag = 1) THEN
    NULL;
ELSEIF (v_count = 1) AND (v_flag = 0) THEN
    NULL;
ELSEIF (v_count = 1) AND (v_flag = 1) THEN
    NULL;
END IF;

建议3:存储过程、函数、触发器、程序块中定义的变量和输入、输出参数在命名上有所区分;
说明:
用'v_ '开头代表程序块中定义的普通变量。
用'p_ '开头代表输入参数变量。
用'x_ '开头代表输入输出或输出参数变量。
用'cur_'开头代表游标变量。存放游标记录集。

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论