DATA_COUNT.REC_CNT_ACTUAL(tablename.coumnname) でカウントを取得して更新する必要がある 20 個のテーブル (table_id は 1 から 20) があります。
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;