每当程序开始和结束时插入日期和时间及其在 oracle 中的总计数
Insert date and time whenever a procedure starts and end and its total count in oracle
我有一个存储过程,我想为其插入执行该过程的日期和时间以及插入的行数。
TBL_SIGNOFF_ACT_CNT
是 table 我想在下面的过程中插入日期、时间、计数...的地方。
create or replace PROCEDURE FIBER_SIGNOFF_UGAR_UPD AS
VSQLERR varchar2 (200);
VSQLERRCODE varchar2 (200);
v_ne_length number;
v_ug_length number;
v_ar_length number;
vper number;
cmpapprvlen number;
v_actual_ug_length number;
v_actual_ar_length number;
vcircle nvarchar2 (100);
vMpname nvarchar2 (100);
vMpcode nvarchar2 (100);
vspanlinkid nvarchar2(100);
vspantype nvarchar2(100);
vnelength number;
BEGIN
execute immediate 'delete from APP_FIBERINV.TBL_FIBER_INV_SIGN_OFF_SHEET';
for cur_r in (
SELECT CIRCLE,
regexp_substr(MP,'[^/]+',1,1)MPNAME,
regexp_substr(MP,'[^/]+',1,2)MPCODE,
SPAN_LINK_ID,
SPAN_TYPE,
NE_LENGTH,
ROUTE_APPROVED_BY_CMM AS CMM_APPROVED_LENGTH
FROM APP_FIBERINV.TBL_FIBER_INV_CMP_REPORT_MV
where (CMM_APPROVED_DATE IS NOT NULL OR ROUTE_APPROVED_BY_CMM > 0 OR JOB_PROGRESS_FLAG = 1)
)
loop
begin
vcircle := cur_r.CIRCLE; vMpname := cur_r.MPNAME; vMpcode := cur_r.MPCODE; vspanlinkid := cur_r.SPAN_LINK_ID; vspantype := cur_r.SPAN_TYPE; vnelength := cur_r.NE_LENGTH;
cmpapprvlen:=cur_r.CMM_APPROVED_LENGTH;
IF vspantype = 'INTERCITY' AND length(vspanlinkid) = 21
THEN
BEGIN
--DBMS_OUTPUT.PUT_LINE('Start '||vspantype||vspanlinkid);
SELECT ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' AND RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' OR RJ_CONSTRUCTION_METHODOLOGY IS NULL THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LENGTH
,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LENGTH
into v_ne_length, v_ug_length, v_ar_length
FROM ne.mv_span@db_link_ne_viewer
WHERE RJ_SPAN_ID = vspanlinkid
AND (RJ_INTRACITY_LINK_ID NOT LIKE ('%\_9%') ESCAPE '\' OR RJ_INTRACITY_LINK_ID IS NULL)
and INVENTORY_STATUS_CODE = 'IPL'
and RJ_MAINTENANCE_ZONE_CODE = vMpcode;
if(v_ne_length > 0 or cmpapprvlen > 0) then
vper:= (v_ug_length / v_ne_length)*100;
v_actual_ug_length:= (cmpapprvlen*vper)/100;
v_actual_ar_length:= cmpapprvlen-v_actual_ug_length; --
else
v_actual_ug_length:= cmpapprvlen;
v_actual_ar_length:= 0;
end if;
DBMS_OUTPUT.PUT_LINE('CALC '||v_actual_ug_length||v_actual_ar_length);
INSERT INTO APP_FIBERINV.TBL_FIBER_INV_SIGN_OFF_SHEET (FSA_UG, FSA_AERIAL, CIRCLE, MAINTENANCEZONENAME, MAINTENANCEZONECODE, SPAN_LINK_ID, SPAN_TYPE,NE_LENGTH, HOTOOFFERDATE)
VALUES (v_actual_ug_length, v_actual_ar_length, vcircle, vMpname, vMpcode, vspanlinkid, vspantype,vnelength, SYSDATE);
COMMIT;
DBMS_OUTPUT.PUT_LINE('INSERTED');
EXCEPTION WHEN NO_DATA_FOUND THEN
v_actual_ug_length:=cmpapprvlen;
v_actual_ar_length:=0;
v_ne_length:=0; v_ug_length:=0; v_ar_length:=0;
WHEN OTHERS THEN
VSQLERRCODE:= SUBSTR(SQLCODE, 1, 5);
VSQLERR:= SUBSTR(SQLERRM, 1, 200);
INSERT INTO SIGNOFF_SHEET_ERR (err_code,err_msg,err_date) VALUES ('db:scheduler',VSQLERRCODE||':'||VSQLERR,SYSDATE);
COMMIT;
--ROLLBACK;
END;
ELSIF vspantype = 'INTERCITY' AND length(vspanlinkid) = 9
THEN
BEGIN
DBMS_OUTPUT.PUT_LINE('Start '||vspantype||vspanlinkid);
SELECT ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LENGTH
,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LENGTH
into v_ne_length, v_ug_length, v_ar_length
FROM ne.mv_span@db_link_ne_viewer
WHERE RJ_INTRACITY_LINK_ID = vspanlinkid
and INVENTORY_STATUS_CODE = 'IPL'
and RJ_MAINTENANCE_ZONE_CODE = vMpcode;
if(v_ne_length > 0 or cmpapprvlen > 0) then
vper:= (v_ug_length/v_ne_length)*100;
v_actual_ug_length:= (cmpapprvlen*vper)/100;
v_actual_ar_length:= cmpapprvlen-v_actual_ug_length; --
else
v_actual_ug_length:= cmpapprvlen;
v_actual_ar_length:= 0;
end if;
DBMS_OUTPUT.PUT_LINE('CALC '||v_actual_ug_length||v_actual_ar_length);
INSERT INTO APP_FIBERINV.TBL_FIBER_INV_SIGN_OFF_SHEET (FSA_UG, FSA_AERIAL, CIRCLE, MAINTENANCEZONENAME, MAINTENANCEZONECODE, SPAN_LINK_ID, SPAN_TYPE,NE_LENGTH, HOTOOFFERDATE)
VALUES (v_actual_ug_length, v_actual_ar_length, vcircle, vMpname, vMpcode, vspanlinkid, vspantype,vnelength, SYSDATE);
COMMIT;
DBMS_OUTPUT.PUT_LINE('INSERTED');
EXCEPTION WHEN NO_DATA_FOUND THEN
v_actual_ug_length:=cmpapprvlen;
v_actual_ar_length:=0;
v_ne_length:=0; v_ug_length:=0; v_ar_length:=0;
WHEN OTHERS THEN
VSQLERRCODE:= SUBSTR(SQLCODE, 1, 5);
VSQLERR:= SUBSTR(SQLERRM, 1, 200);
INSERT INTO SIGNOFF_SHEET_ERR (err_code,err_msg,err_date) VALUES ('db:scheduler',VSQLERRCODE||':'||VSQLERR,SYSDATE);
COMMIT;
END;
ELSIF (vspantype = 'INTRACITY' OR vspantype = 'ENTERPRISE')
THEN
BEGIN
DBMS_OUTPUT.PUT_LINE('Start '||vspantype||vspanlinkid);
SELECT ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LENGTH
,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LENGTH
into v_ne_length, v_ug_length, v_ar_length
FROM ne.mv_span@db_link_ne_viewer
WHERE RJ_INTRACITY_LINK_ID = vspanlinkid
and INVENTORY_STATUS_CODE = 'IPL'
and RJ_MAINTENANCE_ZONE_CODE = vMpcode;
if(v_ne_length > 0 or cmpapprvlen > 0) then
vper:= (v_ug_length/v_ne_length)*100;
v_actual_ug_length:= (cmpapprvlen*vper)/100;
v_actual_ar_length:= cmpapprvlen-v_actual_ug_length; --
else
v_actual_ug_length:= cmpapprvlen;
v_actual_ar_length:= 0;
end if;
DBMS_OUTPUT.PUT_LINE('CALC '||v_actual_ug_length||v_actual_ar_length);
INSERT INTO APP_FIBERINV.TBL_FIBER_INV_SIGN_OFF_SHEET (FSA_UG, FSA_AERIAL, CIRCLE, MAINTENANCEZONENAME, MAINTENANCEZONECODE, SPAN_LINK_ID, SPAN_TYPE,NE_LENGTH, HOTOOFFERDATE)
VALUES (v_actual_ug_length, v_actual_ar_length, vcircle, vMpname, vMpcode, vspanlinkid, vspantype,vnelength, SYSDATE);
COMMIT;
DBMS_OUTPUT.PUT_LINE('INSERTED');
EXCEPTION WHEN NO_DATA_FOUND THEN
v_actual_ug_length:=cmpapprvlen;
v_actual_ar_length:=0;
v_ne_length:=0; v_ug_length:=0; v_ar_length:=0;
WHEN OTHERS THEN
VSQLERRCODE:= SUBSTR(SQLCODE, 1, 5);
VSQLERR:= SUBSTR(SQLERRM, 1, 200);
INSERT INTO SIGNOFF_SHEET_ERR (err_code,err_msg,err_date) VALUES ('db:scheduler',VSQLERRCODE||':'||VSQLERR,SYSDATE);
COMMIT;
END;
end if;
EXCEPTION WHEN OTHERS THEN
VSQLERRCODE:= SUBSTR(SQLCODE, 1, 5);
VSQLERR:= SUBSTR(SQLERRM, 1, 200);
INSERT INTO SIGNOFF_SHEET_ERR (err_code,err_msg,err_date) VALUES ('db:scheduler',VSQLERRCODE||':'||VSQLERR,SYSDATE);
COMMIT;
end;
end loop;
END FIBER_SIGNOFF_UGAR_UPD;
TBL_SIGNOFF_ACT_CNT
table的描述也是
Name Null? Type
------------- ----- ---------------
ERROR_MESSAGE NVARCHAR2(2000)
INSERT_COUNT NUMBER
对于COUNT
,您可以使用下面的方法。
V_NUMBERVARIABLE:= SQL%ROWCOUNT;
在 EXCEPTION
部分之前的过程结束时。您可以使用以下 INSERT INTO
语法。
CREATE TABLE TBL_SIGNOFF_ACT_CNT
(
ERROR_MESSAGE NVARCHAR2 (2000),
INSERT_COUNT NUMBER
);
DECLARE
V_ROWCNT NUMBER;
BEGIN
V_ROWCNT := SQL%ROWCOUNT;
INSERT INTO TBL_SIGNOFF_ACT_CNT
VALUES ('Proc started: ' || TO_CHAR (SYSDATE, 'YYYYMMDD HH24:MI:SS'), V_ROWCNT);
COMMIT;
...
...
V_ROWCNT := SQL%ROWCOUNT;
INSERT INTO TBL_SIGNOFF_ACT_CNT
VALUES ('Proc end: ' || TO_CHAR (SYSDATE, 'YYYYMMDD HH24:MI:SS'), V_ROWCNT);
COMMIT;
END;
Here is a link of my solution:
And this one is your solution updated:
我有一个存储过程,我想为其插入执行该过程的日期和时间以及插入的行数。
TBL_SIGNOFF_ACT_CNT
是 table 我想在下面的过程中插入日期、时间、计数...的地方。
create or replace PROCEDURE FIBER_SIGNOFF_UGAR_UPD AS
VSQLERR varchar2 (200);
VSQLERRCODE varchar2 (200);
v_ne_length number;
v_ug_length number;
v_ar_length number;
vper number;
cmpapprvlen number;
v_actual_ug_length number;
v_actual_ar_length number;
vcircle nvarchar2 (100);
vMpname nvarchar2 (100);
vMpcode nvarchar2 (100);
vspanlinkid nvarchar2(100);
vspantype nvarchar2(100);
vnelength number;
BEGIN
execute immediate 'delete from APP_FIBERINV.TBL_FIBER_INV_SIGN_OFF_SHEET';
for cur_r in (
SELECT CIRCLE,
regexp_substr(MP,'[^/]+',1,1)MPNAME,
regexp_substr(MP,'[^/]+',1,2)MPCODE,
SPAN_LINK_ID,
SPAN_TYPE,
NE_LENGTH,
ROUTE_APPROVED_BY_CMM AS CMM_APPROVED_LENGTH
FROM APP_FIBERINV.TBL_FIBER_INV_CMP_REPORT_MV
where (CMM_APPROVED_DATE IS NOT NULL OR ROUTE_APPROVED_BY_CMM > 0 OR JOB_PROGRESS_FLAG = 1)
)
loop
begin
vcircle := cur_r.CIRCLE; vMpname := cur_r.MPNAME; vMpcode := cur_r.MPCODE; vspanlinkid := cur_r.SPAN_LINK_ID; vspantype := cur_r.SPAN_TYPE; vnelength := cur_r.NE_LENGTH;
cmpapprvlen:=cur_r.CMM_APPROVED_LENGTH;
IF vspantype = 'INTERCITY' AND length(vspanlinkid) = 21
THEN
BEGIN
--DBMS_OUTPUT.PUT_LINE('Start '||vspantype||vspanlinkid);
SELECT ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' AND RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' OR RJ_CONSTRUCTION_METHODOLOGY IS NULL THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LENGTH
,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LENGTH
into v_ne_length, v_ug_length, v_ar_length
FROM ne.mv_span@db_link_ne_viewer
WHERE RJ_SPAN_ID = vspanlinkid
AND (RJ_INTRACITY_LINK_ID NOT LIKE ('%\_9%') ESCAPE '\' OR RJ_INTRACITY_LINK_ID IS NULL)
and INVENTORY_STATUS_CODE = 'IPL'
and RJ_MAINTENANCE_ZONE_CODE = vMpcode;
if(v_ne_length > 0 or cmpapprvlen > 0) then
vper:= (v_ug_length / v_ne_length)*100;
v_actual_ug_length:= (cmpapprvlen*vper)/100;
v_actual_ar_length:= cmpapprvlen-v_actual_ug_length; --
else
v_actual_ug_length:= cmpapprvlen;
v_actual_ar_length:= 0;
end if;
DBMS_OUTPUT.PUT_LINE('CALC '||v_actual_ug_length||v_actual_ar_length);
INSERT INTO APP_FIBERINV.TBL_FIBER_INV_SIGN_OFF_SHEET (FSA_UG, FSA_AERIAL, CIRCLE, MAINTENANCEZONENAME, MAINTENANCEZONECODE, SPAN_LINK_ID, SPAN_TYPE,NE_LENGTH, HOTOOFFERDATE)
VALUES (v_actual_ug_length, v_actual_ar_length, vcircle, vMpname, vMpcode, vspanlinkid, vspantype,vnelength, SYSDATE);
COMMIT;
DBMS_OUTPUT.PUT_LINE('INSERTED');
EXCEPTION WHEN NO_DATA_FOUND THEN
v_actual_ug_length:=cmpapprvlen;
v_actual_ar_length:=0;
v_ne_length:=0; v_ug_length:=0; v_ar_length:=0;
WHEN OTHERS THEN
VSQLERRCODE:= SUBSTR(SQLCODE, 1, 5);
VSQLERR:= SUBSTR(SQLERRM, 1, 200);
INSERT INTO SIGNOFF_SHEET_ERR (err_code,err_msg,err_date) VALUES ('db:scheduler',VSQLERRCODE||':'||VSQLERR,SYSDATE);
COMMIT;
--ROLLBACK;
END;
ELSIF vspantype = 'INTERCITY' AND length(vspanlinkid) = 9
THEN
BEGIN
DBMS_OUTPUT.PUT_LINE('Start '||vspantype||vspanlinkid);
SELECT ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LENGTH
,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LENGTH
into v_ne_length, v_ug_length, v_ar_length
FROM ne.mv_span@db_link_ne_viewer
WHERE RJ_INTRACITY_LINK_ID = vspanlinkid
and INVENTORY_STATUS_CODE = 'IPL'
and RJ_MAINTENANCE_ZONE_CODE = vMpcode;
if(v_ne_length > 0 or cmpapprvlen > 0) then
vper:= (v_ug_length/v_ne_length)*100;
v_actual_ug_length:= (cmpapprvlen*vper)/100;
v_actual_ar_length:= cmpapprvlen-v_actual_ug_length; --
else
v_actual_ug_length:= cmpapprvlen;
v_actual_ar_length:= 0;
end if;
DBMS_OUTPUT.PUT_LINE('CALC '||v_actual_ug_length||v_actual_ar_length);
INSERT INTO APP_FIBERINV.TBL_FIBER_INV_SIGN_OFF_SHEET (FSA_UG, FSA_AERIAL, CIRCLE, MAINTENANCEZONENAME, MAINTENANCEZONECODE, SPAN_LINK_ID, SPAN_TYPE,NE_LENGTH, HOTOOFFERDATE)
VALUES (v_actual_ug_length, v_actual_ar_length, vcircle, vMpname, vMpcode, vspanlinkid, vspantype,vnelength, SYSDATE);
COMMIT;
DBMS_OUTPUT.PUT_LINE('INSERTED');
EXCEPTION WHEN NO_DATA_FOUND THEN
v_actual_ug_length:=cmpapprvlen;
v_actual_ar_length:=0;
v_ne_length:=0; v_ug_length:=0; v_ar_length:=0;
WHEN OTHERS THEN
VSQLERRCODE:= SUBSTR(SQLCODE, 1, 5);
VSQLERR:= SUBSTR(SQLERRM, 1, 200);
INSERT INTO SIGNOFF_SHEET_ERR (err_code,err_msg,err_date) VALUES ('db:scheduler',VSQLERRCODE||':'||VSQLERR,SYSDATE);
COMMIT;
END;
ELSIF (vspantype = 'INTRACITY' OR vspantype = 'ENTERPRISE')
THEN
BEGIN
DBMS_OUTPUT.PUT_LINE('Start '||vspantype||vspanlinkid);
SELECT ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH,
ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY IS NULL OR RJ_CONSTRUCTION_METHODOLOGY NOT LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS UG_LENGTH
,ROUND(SUM(CASE WHEN RJ_CONSTRUCTION_METHODOLOGY LIKE '%AERIAL%' OR RJ_CONSTRUCTION_METHODOLOGY LIKE '%CLAMP%' THEN NVL(CALCULATED_LENGTH,0) ELSE 0 END)/1000,4) AS AR_LENGTH
into v_ne_length, v_ug_length, v_ar_length
FROM ne.mv_span@db_link_ne_viewer
WHERE RJ_INTRACITY_LINK_ID = vspanlinkid
and INVENTORY_STATUS_CODE = 'IPL'
and RJ_MAINTENANCE_ZONE_CODE = vMpcode;
if(v_ne_length > 0 or cmpapprvlen > 0) then
vper:= (v_ug_length/v_ne_length)*100;
v_actual_ug_length:= (cmpapprvlen*vper)/100;
v_actual_ar_length:= cmpapprvlen-v_actual_ug_length; --
else
v_actual_ug_length:= cmpapprvlen;
v_actual_ar_length:= 0;
end if;
DBMS_OUTPUT.PUT_LINE('CALC '||v_actual_ug_length||v_actual_ar_length);
INSERT INTO APP_FIBERINV.TBL_FIBER_INV_SIGN_OFF_SHEET (FSA_UG, FSA_AERIAL, CIRCLE, MAINTENANCEZONENAME, MAINTENANCEZONECODE, SPAN_LINK_ID, SPAN_TYPE,NE_LENGTH, HOTOOFFERDATE)
VALUES (v_actual_ug_length, v_actual_ar_length, vcircle, vMpname, vMpcode, vspanlinkid, vspantype,vnelength, SYSDATE);
COMMIT;
DBMS_OUTPUT.PUT_LINE('INSERTED');
EXCEPTION WHEN NO_DATA_FOUND THEN
v_actual_ug_length:=cmpapprvlen;
v_actual_ar_length:=0;
v_ne_length:=0; v_ug_length:=0; v_ar_length:=0;
WHEN OTHERS THEN
VSQLERRCODE:= SUBSTR(SQLCODE, 1, 5);
VSQLERR:= SUBSTR(SQLERRM, 1, 200);
INSERT INTO SIGNOFF_SHEET_ERR (err_code,err_msg,err_date) VALUES ('db:scheduler',VSQLERRCODE||':'||VSQLERR,SYSDATE);
COMMIT;
END;
end if;
EXCEPTION WHEN OTHERS THEN
VSQLERRCODE:= SUBSTR(SQLCODE, 1, 5);
VSQLERR:= SUBSTR(SQLERRM, 1, 200);
INSERT INTO SIGNOFF_SHEET_ERR (err_code,err_msg,err_date) VALUES ('db:scheduler',VSQLERRCODE||':'||VSQLERR,SYSDATE);
COMMIT;
end;
end loop;
END FIBER_SIGNOFF_UGAR_UPD;
TBL_SIGNOFF_ACT_CNT
table的描述也是
Name Null? Type
------------- ----- ---------------
ERROR_MESSAGE NVARCHAR2(2000)
INSERT_COUNT NUMBER
对于COUNT
,您可以使用下面的方法。
V_NUMBERVARIABLE:= SQL%ROWCOUNT;
在 EXCEPTION
部分之前的过程结束时。您可以使用以下 INSERT INTO
语法。
CREATE TABLE TBL_SIGNOFF_ACT_CNT
(
ERROR_MESSAGE NVARCHAR2 (2000),
INSERT_COUNT NUMBER
);
DECLARE
V_ROWCNT NUMBER;
BEGIN
V_ROWCNT := SQL%ROWCOUNT;
INSERT INTO TBL_SIGNOFF_ACT_CNT
VALUES ('Proc started: ' || TO_CHAR (SYSDATE, 'YYYYMMDD HH24:MI:SS'), V_ROWCNT);
COMMIT;
...
...
V_ROWCNT := SQL%ROWCOUNT;
INSERT INTO TBL_SIGNOFF_ACT_CNT
VALUES ('Proc end: ' || TO_CHAR (SYSDATE, 'YYYYMMDD HH24:MI:SS'), V_ROWCNT);
COMMIT;
END;
Here is a link of my solution:
And this one is your solution updated: