Create/drop DML error tables

This commit is contained in:
Jan Kvetina 2022-01-31 21:22:25 +01:00
parent 047d4c87d2
commit 3a2c86c599
2 changed files with 83 additions and 0 deletions

View File

@ -73,6 +73,11 @@ CREATE OR REPLACE PACKAGE app AS
logs_table_name CONSTANT VARCHAR2(30) := 'LOGS'; -- used in purge_old
logs_max_age CONSTANT PLS_INTEGER := 7; -- max logs age in days
-- owner of DML error tables
dml_tables_owner CONSTANT VARCHAR2(30) := NULL; -- NULL = same as current owner
dml_tables_postfix CONSTANT VARCHAR2(30) := '_E$';
view_dml_errors CONSTANT VARCHAR2(30) := 'LOGS_DML_ERRORS';
-- arrays to specify adhoc requests
TYPE arr_log_setup IS VARRAY(100) OF logs_blacklist%ROWTYPE;
@ -1279,6 +1284,27 @@ CREATE OR REPLACE PACKAGE app AS
-- ### DML Error Handling
--
--
-- Drop DML error tables matching filter
--
PROCEDURE drop_dml_table (
in_table_name logs.module_name%TYPE
);
--
-- Recreates DML error tables matching filter
--
PROCEDURE create_dml_table (
in_table_name logs.module_name%TYPE
);
--
-- Refresh views source (convert views source from LONG to searchable lines)
--

View File

@ -2967,6 +2967,63 @@ CREATE OR REPLACE PACKAGE BODY app AS
PROCEDURE drop_dml_table (
in_table_name logs.module_name%TYPE
)
AS
BEGIN
app.log_module(in_table_name);
-- process existing data first
app.process_dml_errors(in_table_name);
--
EXECUTE IMMEDIATE
'DROP TABLE ' || app.get_dml_table(in_table_name) || ' PURGE';
--
app.log_success();
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error();
END;
PROCEDURE create_dml_table (
in_table_name logs.module_name%TYPE
)
AS
BEGIN
app.log_module(in_table_name);
-- drop existing tables
app.drop_dml_table(in_table_name);
-- create DML log tables for all tables
DBMS_ERRLOG.CREATE_ERROR_LOG (
dml_table_name => app.get_owner(app.get_app_id()) || '.' || in_table_name,
err_log_table_owner => app.get_owner(app.get_app_id()),
err_log_table_name => app.get_dml_table(in_table_name),
skip_unsupported => TRUE
);
--
IF app.get_owner(app.get_app_id()) != app.dml_tables_owner THEN
EXECUTE IMMEDIATE
'GRANT ALL ON ' || app.get_dml_table(in_table_name) ||
' TO ' || app.get_owner(app.get_app_id());
END IF;
--
app.log_success();
EXCEPTION
WHEN app.app_exception THEN
RAISE;
WHEN OTHERS THEN
app.raise_error();
END;
PROCEDURE refresh_user_source_views (
in_view_name VARCHAR2 := NULL,
in_force BOOLEAN := FALSE