有 20 个表(table_id 从 1 到 20)需要在 DATA_COUNT.REC_CNT_ACTUAL(tablename.coumnname) 中获取和更新其计数。
对于 13 个表,计数更新成功。然后弹出这个错误。
最初,我通过传递 table_id 和 table_name 将以下内容编写为过程。该过程被连续调用20次。我虽然这可能是错误的原因:ORA-21780:超过了对象持续时间的最大数量。
然后我删除了那个程序。现在,这 20 个更新语句位于包中的 20 个不同位置。还是一样的错误。请帮助我理解问题或提出替代方案。
UPDATE DATA_COUNT
SET REC_CNT_ACTUAL=
(SELECT COUNT(1) FROM TITLE
)
WHERE TABLE_ID =20;
以下是使用的程序:
PROCEDURE DELETE_COUNT(
PI_TABLE_ID IN NUMBER,
pi_table_name IN VARCHAR2)
AS
pragma autonomous_transaction;
V_SQLERRM VARCHAR2(4000) := NULL;
V_SQLERRCODE VARCHAR2(50) := NULL;
V_CNT NUMBER;
V_SQL varchar2(4000);
BEGIN
V_SQL:='select COUNT(1) from '|| PI_TABLE_NAME;
EXECUTE immediate V_SQL INTO v_cnt;
UPDATE DATA_COUNT
SET REC_CNT_ACTUAL=v_cnt
where TABLE_ID =PI_TABLE_ID;
commit;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
v_sqlerrm := SUBSTR(sqlerrm,1,255);
v_sqlerrcode := SQLCODE;
/*Log error*/
datareduction_run_log (-20001, 'procedure DELETE_COUNT', CURRENT_TIMESTAMP, 'FAILED', 'Error in procedure DELETE_COUNT. Error Number:'||v_sqlerrcode||'-Error Msg:'||v_sqlerrm||'- backtrace - ' || dbms_utility.format_error_backtrace, SYSDATE, USER, NULL, NULL );
RAISE_APPLICATION_ERROR( -20001,'Unexpected Error: Error Number:'||V_SQLERRCODE||'-Error Msg:'||V_SQLERRM||'- backtrace - ' || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
END DELETE_COUNT;