数据库存储过程编写模板

CREATE OR REPLACE PROCEDURE GBRP_QY_ACCIDENT_M_DAT_P(
   In_StatDay in VARCHAR2, --输入时间,格式:yyyy-mm-dd
   On_RtnCode out NUMBER,  --返回值:正确为0 错误为oracle的错误代码
   On_RtnMsg out VARCHAR2  --返回信息,正确为NO_ERROR,否则为oracle的出错信息
)
IS
 /*变量初始化*/
 vn_RtnCode NUMBER(8) := 0; --程序返回代码 正确为0 错误为oracle的错误代码
 vv_RtnMsg VARCHAR2(600) := 'NO_ERROR'; --程序返回信息,正确为NO_ERROR,否则为oracle的出错信息
 vd_BeginDate DATE:=sysdate; --程序起始时间
 vd_EndDate DATE; --程序结束时间
 --运行步长,如果程序较长,可以根据实际情况对变量做增量,出错时根据此变量当前值比较容易分析,运行到最后赋值  --为-1,标识正常退出。
 vn_Step NUMBER(4) := '0';
 vv_PrcName VARCHAR2(30):='GBRP_QY_ACCIDENT_M_DAT_P';--存储过程名称
 vv_report_date VARCHAR2(10);  --统计时间


BEGIN
  vn_Step := 1;
  --日报
  if In_StatDay='0' then 
      vv_report_date := to_char(SYSDATE-1,'YYYY-MM-DD');
  else
      vv_report_date := In_StatDay;
  --月报
  /**if In_StatDay='0' then 
      vv_report_date := to_char(add_months(SYSDATE,-1),'YYYY-MM');
  else
      vv_report_date := In_StatDay;
  */
  --年报
  /**if In_StatDay='0' then 
      vv_report_date := to_char(add_months(SYSDATE,-12),'YYYY');
  else
      vv_report_date := In_StatDay;
  */
  
  /*程序主题*/
  EXECUTE IMMEDIATE 'TRUNCATE TABLE GBRD_QUALITY_ACCIDENT_M_DAT';
  INSERT INTO GBRD_QUALITY_ACCIDENT_M_DAT(
     DATA_ID,
     REPORT_ITEM_ID,
     DATA_DATE,
     STATION_ID,
     STATION_NAME,
     CENTER_ID
  )
  SELECT
     DAT.DATA_ID,
     DAT.REPORT_ITEM_ID,
     DAT.DATA_DATE,
     GET_DATE_BYID(DAT.REPORT_ITEM_ID);
     DAT.STATION_ID,
     GET_NAME_BYID(DAT.STATION_ID),
     DAT.CENTER_ID


  FROM ZST_REP_IN_QUALITY_TAB@TO_CENTER DAT
  WHERE DAT.REPORT_ID = 3
      AND TO_CHAR(DATA_DATE,'YYYY-MM')=vv_report_date;
  COMMIT;
  --  -1,标识正常退出
  vn_Step :=-1;
  --返回信息设置
  On_RtnCode := vn_RtnCode;
  On_RtnMsg := vv_RtnMsg;
  --程序结束时间
  vd_EndDate := sysdate;
  --写日志
EXCEPTION
  WHEN OTHERS THEN
    vn_RtnCode := SQLCODE;
    vv_RtnMsg := substr(SQLERRM,600);
    ROLLBACK;
    On_RtnCode := vn_RtnCode;
    On_RtnMsg := vv_RtnMsg;
    vd_EndDate := sysdate;
    --写日志
    P_WrtLog(vv_PrcName,vn_RtnCode,vv_RtnMsg,vd_BeginDate,vd_EndDate,vn_Step);


END GBRP_QY_ACCIDENT_M_DAT_P;


--日志
CREATE OR REPLACE PROCEDURE P_WrtLog(
  vv_PrcName IN VARCHAR2,
  vn_RtnCode IN NUMBER,
  vv_RtnMsg IN VARCHAR2,
  vd_BeginDate IN DATE,
  vd_EndDate IN DATE,
  vn_Step IN NUMBER
)
IS
BEGIN
  INSERT INTO GBSY_LOG_T(
   vv_PrcName,
   vn_RtnCode,
   vv_RtnMsg,
   vd_BeginDate,
   vd_EndDate,
   vn_Step
  )
  VALUES(
   vv_PrcName,
   vn_RtnCode,
   vv_RtnMsg,
   vd_BeginDate,
   vd_EndDate,
   vn_Step
  );
  COMMIT;

END P_WrtLog;

CREATE OR REPLACE PROCEDURE GBRP_QY_ACCIDENT_M_DAT_P(
   On_RtnCode out NUMBER,  --返回值:正确为0 错误为oracle的错误代码
   On_RtnMsg out VARCHAR2  --返回信息,正确为NO_ERROR,否则为oracle的出错信息
)
IS
 /*变量初始化*/
 vn_RtnCode NUMBER(8) := 0; --程序返回代码 正确为0 错误为oracle的错误代码
 vv_RtnMsg VARCHAR2(600) := 'NO_ERROR'; --程序返回信息,正确为NO_ERROR,否则为oracle的出错信息
 vd_BeginDate DATE:=sysdate; --程序起始时间
 vd_EndDate DATE; --程序结束时间
 --运行步长,如果程序较长,可以根据实际情况对变量做增量,出错时根据此变量当前值比较容易分析,运行到最后赋值  --为-1,标识正常退出。
 vn_Step NUMBER(4) := '0';
 vv_PrcName VARCHAR2(30):='GBRP_QY_ACCIDENT_M_DAT_P';--存储过程名称


BEGIN
  vn_Step := 1;
  /*程序主题*/
  EXECUTE IMMEDIATE 'TRUNCATE TABLE GBRD_QUALITY_ACCIDENT_M_DAT';
  INSERT INTO GBRD_QUALITY_ACCIDENT_M_DAT(
     DATA_ID,
     REPORT_ITEM_ID,
     DATA_DATE,
     STATION_ID,
     STATION_NAME,
     CENTER_ID
  )
  SELECT
     DAT.DATA_ID,
     DAT.REPORT_ITEM_ID,
     DAT.DATA_DATE,
     GET_DATE_BYID(DAT.REPORT_ITEM_ID);
     DAT.STATION_ID,
     GET_NAME_BYID(DAT.STATION_ID),
     DAT.CENTER_ID


  FROM ZST_REP_IN_QUALITY_TAB@TO_CENTER DAT
  WHERE DAT.REPORT_ID = 3;
  
  --  -1,标识正常退出
  vn_Step :=-1;
  --返回信息设置
  On_RtnCode := vn_RtnCode;
  On_RtnMsg := vv_RtnMsg;
  --程序结束时间
  vd_EndDate := sysdate;
  --写日志
EXCEPTION
  WHEN OTHERS THEN
    vn_RtnCode := SQLCODE;
    vv_RtnMsg := substr(SQLERRM,600);
    ROLLBACK;
    On_RtnCode := vn_RtnCode;
    On_RtnMsg := vv_RtnMsg;
    vd_EndDate := sysdate;
    --写日志
    P_WrtLog(vv_PrcName,vn_RtnCode,vv_RtnMsg,vd_BeginDate,vd_EndDate,vn_Step);


END GBRP_QY_ACCIDENT_M_DAT_P;


--日志
CREATE OR REPLACE PROCEDURE P_WrtLog(
  vv_PrcName IN VARCHAR2,
  vn_RtnCode IN NUMBER,
  vv_RtnMsg IN VARCHAR2,
  vd_BeginDate IN DATE,
  vd_EndDate IN DATE,
  vn_Step IN NUMBER
)
IS
BEGIN
  INSERT INTO GBSY_LOG_T(
   vv_PrcName,
   vn_RtnCode,
   vv_RtnMsg,
   vd_BeginDate,
   vd_EndDate,
   vn_Step
  )
  VALUES(
   vv_PrcName,
   vn_RtnCode,
   vv_RtnMsg,
   vd_BeginDate,
   vd_EndDate,
   vn_Step
  );
  COMMIT;
END P_WrtLog;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值