开发注意事项

-- 2022-02-19 
1. 一般来说,一个逻辑块,一个 commit ,目的在日志记录表中跟踪过程的运行轨迹
2. union 去重的时候,每一个模块都可以使用 distinct
3. 如果有存在清表的逻辑,必须考虑如果过程失败,数据回滚复原的场景
4. 和亮总确认,在没有说明的情况下,所有数据都默认拿 有效的数据,
5. 看需求文档,仔细琢磨各个条件值
6. 对于有疑问的条件值,尽快问需求负责人
7. 写完过程,测试主键是否重复,数量值是否跟源表的单个或者汇总值,是否一致
8. 使用 update 的时候,尽量用的字段都有索引,不然会很慢
9. -- 2022-03-03
https://www.cnblogs.com/augus007/articles/9309479.html
最高效的删除重复记录方法 ( 因为使用了 ROWID)
DELETE FROM EMP E
WHERE E.ROWID >(SELECT MIN(X.ROWID) FROM EMP X 
                WHERE X.EMP_NO = E.EMP_NO);
/******************************************************
DWMGR 开发模板

*******************************************************/
  /*
  Ver   by          date           mark
  1.0  V53368915   2021-12-29      create #1521007 新建需求评审导出和导入功能
  */
  PROCEDURE p_ui_dp_rpt(p_parameter  IN VARCHAR2,
                        p_oflow_id   IN VARCHAR2,
                        p_oflow_name IN VARCHAR2,
                        p_err_code   OUT NUMBER) AS

    v_task_name     VARCHAR2(200) := 'p_ui_dp_rpt.' || p_parameter;
    v_sub_task      VARCHAR2(200);
    v_msg           VARCHAR2(4000);

  BEGIN

    dwmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                       v_task_name,
                                       'Start',
                                       v_msg,
                                       p_oflow_id,
                                       p_oflow_name);

    --创建新分区
    v_sub_task := '.add partition';
    dwmgr.pkg_iplan_log.write_task_log(i_module_name => gv_module_name,
                                       i_task_name   => v_task_name ||
                                                        v_sub_task,
                                       i_status      => 'Start',
                                       i_msg         => v_msg,
                                       i_oflow_id    => p_oflow_id,
                                       i_oflow_name  => p_oflow_name);

    --头表分区
    dwmgr.pkg_iplan_util.p_add_partition(p_oflow_id,
                                         p_oflow_name,
                                         p_err_code,
                                         'UI_DP_RPT_HEADER',
                                         'PART_' ||
                                         to_char(v_plan_id, 'YYYYMMDD'),
                                         to_char(v_plan_id, 'YYYYMMDD'));

    --行表分区
    dwmgr.pkg_iplan_util.p_add_partition(p_oflow_id,
                                         p_oflow_name,
                                         p_err_code,
                                         'UI_DP_RPT_LINE',
                                         'PART_' ||
                                         to_char(v_plan_id, 'YYYYMMDD'),
                                         to_char(v_plan_id, 'YYYYMMDD'));

    dwmgr.pkg_iplan_log.write_task_log(i_module_name => gv_module_name,
                                       i_task_name   => v_task_name ||
                                                        v_sub_task,
                                       i_status      => 'End',
                                       i_msg         => v_msg,
                                       i_oflow_id    => p_oflow_id,
                                       i_oflow_name  => p_oflow_name);

    -- 初始化需求评审头表
    v_sub_task := '.insert ui_dp_rpt_header';
    dwmgr.pkg_iplan_log.write_task_log(i_module_name => gv_module_name,
                                       i_task_name   => v_task_name ||
                                                        v_sub_task,
                                       i_status      => 'Start',
                                       i_msg         => v_msg,
                                       i_oflow_id    => p_oflow_id,
                                       i_oflow_name  => p_oflow_name);

    v_msg := 'rows=' || SQL%ROWCOUNT;
    COMMIT;
    dwmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                       v_task_name || v_sub_task,
                                       'End',
                                       v_msg,
                                       p_oflow_id,
                                       p_oflow_name);

    v_msg      := 'Success';
    p_err_code := 0;
    dwmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                       v_task_name,
                                       'End',
                                       v_msg,
                                       p_oflow_id,
                                       p_oflow_name);

  EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
      p_err_code := SQLCODE;
      v_msg      := substr(dbms_utility.format_error_stack ||
                           dbms_utility.format_error_backtrace,
                           1,
                           4000);
      dwmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                         v_task_name,
                                         'Failed',
                                         v_msg,
                                         p_oflow_id,
                                         p_oflow_name);
      dwmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                         v_task_name || v_sub_task,
                                         'Failed',
                                         v_msg,
                                         p_oflow_id,
                                         p_oflow_name);
      raise_application_error(-20001, v_msg);

  END p_ui_dp_rpt;


/******************************************************
SOPMGR 开发模板
1. 一个过程,一个 commit
2. 如果有存在清表的逻辑,必须考虑如果过程失败,数据回滚复原的场景
*******************************************************/
  /******************************************************************************
     PURPOSE:    SKU-销售组织对应关系主数据校验,数据从 IN_SOP_DMR 至 MST_SOP_DMR
     Ver        Date         Author           Description
     ---------  ----------  ---------------  ------------------------------------
     1.0        2022-01-14   V53368915        Created.
  ******************************************************************************/
  PROCEDURE proc_valid_dmr(parameter     IN VARCHAR2
                          ,workflow_name IN VARCHAR2
                          ,workflow_id   IN VARCHAR2
                          ,p_err_code    OUT NUMBER) AS

    v_task_name VARCHAR2(30) := 'proc_valid_dmr';
    v_msg       VARCHAR2(4000);

  BEGIN
    p_err_code := -20999;

    IF v_plan_id_count != 1
    THEN
      p_err_code := SQLCODE; /* sqlcode:sqlcode函数用来返回pl/sql执行内部异常代码。其中 0 表示成功;-1 表示失败;100 表示没有检索到数据;+1 表示用户自定义异常。 */
      v_msg      := 'in_sop_md_cube_sop_rtf 接口无数据或数据版本不唯一, 请联系ESP关键用户检查daily rtf 数据';
      sopmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                          v_task_name,
                                          'Failed',
                                          v_msg,
                                          workflow_id,
                                          workflow_name);
      raise_application_error(-20001, v_msg);
    END IF;

    sopmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                        v_task_name,
                                        'Start',
                                        v_msg,
                                        workflow_id,
                                        workflow_name);

    sopmgr.pkg_iplan_log.write_task_log_once(gv_module_name,
                                             v_task_name,
                                             'parameter: ' || parameter,
                                             workflow_id,
                                             workflow_name);

    v_msg      := 'Success!';
    p_err_code := 0;
    sopmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                        v_task_name,
                                        'End',
                                        v_msg,
                                        workflow_id,
                                        workflow_name);
    COMMIT;

  EXCEPTION
    WHEN OTHERS THEN
      p_err_code := SQLCODE;
      v_msg      := substr(dbms_utility.format_error_stack ||
                           dbms_utility.format_error_backtrace,
                           1,
                           4000);
      sopmgr.pkg_iplan_log.write_task_log(gv_module_name,
                                          v_task_name,
                                          'Failed',
                                          v_msg,
                                          workflow_id,
                                          workflow_name);
      raise_application_error(-20001, v_msg);

  END proc_valid_dmr;

-- 2022-01-27 
开发的表格一般都有如下字段:

  sys_created_date             DATE default sysdate,
  sys_created_by               VARCHAR2(64) default 'SYSTEM',
  sys_created_by_name          VARCHAR2(64) default 'SYSTEM',
  sys_last_modified_date       DATE default sysdate,
  sys_last_modified_by         VARCHAR2(64) default 'SYSTEM',
  sys_last_modified_by_name    VARCHAR2(64) default 'SYSTEM',
  sys_last_modified_by_version NUMBER default 0

;
comment on column dwmgr.ui_sop_rpt_header.sys_created_date             is '创建时间 默认为当前系统时间,sysdate';
comment on column dwmgr.ui_sop_rpt_header.sys_created_by               is '创建人工号 默认为SYSTEM';
comment on column dwmgr.ui_sop_rpt_header.sys_created_by_name          is '创建人名称 默认为SYSTEM';
comment on column dwmgr.ui_sop_rpt_header.sys_last_modified_date       is '最后更新时间 默认为当前系统时间,sysdate';
comment on column dwmgr.ui_sop_rpt_header.sys_last_modified_by         is '最后更新人工号 默认为SYSTEM';
comment on column dwmgr.ui_sop_rpt_header.sys_last_modified_by_name    is '最后更新人名称 默认为SYSTEM';
comment on column dwmgr.ui_sop_rpt_header.sys_last_modified_by_version is '最后更新版本,流水码,逐渐递增+1,默认为0';
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务