Skip to content

packages tree.process_dml_error

Jan Kvetina edited this page Oct 9, 2020 · 2 revisions

tree.process_dml_error

Repository spec: tree.purge_old, body: tree.purge_old


Signature

PROCEDURE process_dml_error (
    in_log_id           logs.log_id%TYPE,
    in_error_table      VARCHAR2,   -- remove references to logs_dml_errors view
    in_table_name       VARCHAR2,   -- because it can get invalidated too often
    in_table_rowid      VARCHAR2,
    in_action           VARCHAR2
);
Show code (36 lines)

PROCEDURE process_dml_error (
    in_log_id           logs.log_id%TYPE,
    in_error_table      VARCHAR2,   -- remove references to logs_dml_errors view
    in_table_name       VARCHAR2,   -- because it can get invalidated too often
    in_table_rowid      VARCHAR2,
    in_action           VARCHAR2
) AS
    payload             logs_lobs.payload_clob%TYPE;
    error_id            logs_lobs.log_id%TYPE;
BEGIN
    tree.log_module(in_log_id, in_error_table, in_table_name, in_table_rowid, in_action);
    --
    payload := tree.get_dml_query (
        in_log_id       => in_log_id,
        in_table_name   => in_table_name,
        in_table_rowid  => in_table_rowid,
        in_action       => in_action
    );
    --
    SELECT MIN(e.log_id) INTO error_id  -- find row with actual error
    FROM logs e
    WHERE e.created_at      >= TRUNC(SYSDATE)
        AND e.log_parent    = in_log_id
        AND e.flag          = tree.flag_error;
    --
    tree.attach_clob (
        in_payload      => payload,
        in_lob_name     => 'DML_ERROR',
        in_log_id       => COALESCE(error_id, in_log_id)
    );

    -- remove from DML ERR table
    EXECUTE IMMEDIATE
        'DELETE FROM ' || in_error_table ||
        ' WHERE ora_err_tag$ = ' || in_log_id;
END;

Clone this wiki locally