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;