mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-09-12 22:45:02 -04:00
Added database/sql
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
create or replace package body db_error_logger
|
||||
as
|
||||
procedure dblogerror( p_ora_errno number, p_notes varchar2 default NULL)
|
||||
as
|
||||
|
||||
PRAGMA AUTONOMOUS_TRANSACTION;
|
||||
|
||||
v_ora_errmsg varchar2(255);
|
||||
v_schema varchar2(30);
|
||||
v_module varchar2(80);
|
||||
v_notes varchar2(4000);
|
||||
|
||||
begin
|
||||
|
||||
v_ora_errmsg := SQLERRM(p_ora_errno);
|
||||
stack_search(2, v_schema, v_module);
|
||||
|
||||
if length(p_notes) > 4000 then
|
||||
v_notes := substr(p_notes,1,4000);
|
||||
else
|
||||
v_notes := p_notes;
|
||||
end if;
|
||||
|
||||
insert into errorlog
|
||||
( error_id,
|
||||
ora_errno,
|
||||
ora_errmsg,
|
||||
schema_name,
|
||||
module_name,
|
||||
notes )
|
||||
values
|
||||
( seq_errorlog.nextval,
|
||||
p_ora_errno,
|
||||
v_ora_errmsg,
|
||||
v_schema,
|
||||
v_module,
|
||||
v_notes );
|
||||
|
||||
COMMIT;
|
||||
|
||||
exception
|
||||
when others then
|
||||
NULL;
|
||||
end;
|
||||
|
||||
procedure dblogerror_values( p_owner varchar2, p_name varchar2, p_type varchar2, p_value varchar2)
|
||||
as
|
||||
|
||||
PRAGMA AUTONOMOUS_TRANSACTION;
|
||||
v_value varchar2(4000);
|
||||
|
||||
begin
|
||||
|
||||
if length(p_value) > 4000 then
|
||||
v_value := substr(p_value,1,4000);
|
||||
else
|
||||
v_value := p_value;
|
||||
end if;
|
||||
|
||||
insert into errorlog_values
|
||||
( error_id,
|
||||
element_owner,
|
||||
element_name,
|
||||
element_type,
|
||||
element_value )
|
||||
values
|
||||
( seq_errorlog.currval,
|
||||
p_owner,
|
||||
p_name,
|
||||
p_type,
|
||||
v_value );
|
||||
|
||||
COMMIT;
|
||||
|
||||
exception
|
||||
when others then
|
||||
NULL;
|
||||
|
||||
end;
|
||||
|
||||
procedure stack_search ( i_search in integer, o_schema out varchar2, o_module out varchar2 )
|
||||
-----
|
||||
-- Returns the schema and module of the specified stack level
|
||||
-- (specified by i_search). Stack level 0 is this proc.
|
||||
-- Stack level 1 is this proc's caller. Level 2 is THEIR
|
||||
-- caller. And so on.
|
||||
-----
|
||||
as
|
||||
call_stack varchar2(4096) default dbms_utility.format_call_stack;
|
||||
n number;
|
||||
m_found_stack boolean default false;
|
||||
m_line varchar2(255);
|
||||
m_count number := 0;
|
||||
m_start integer := 1;
|
||||
m_end integer := -1;
|
||||
begin
|
||||
o_schema := 'Not found';
|
||||
o_module := 'Not found';
|
||||
loop
|
||||
m_end := instr( call_stack, chr(10), m_start );
|
||||
exit when ( m_count > i_search or m_end is NULL or m_end = 0 );
|
||||
m_line := ltrim(substr( call_stack, m_start + 20, m_end - (m_start + 20 )));
|
||||
m_start := m_end + 1;
|
||||
-- Remove formatted stack header
|
||||
if ( NOT m_found_stack ) then
|
||||
if ( m_line like 'name%' ) then
|
||||
m_found_stack := TRUE;
|
||||
end if;
|
||||
else
|
||||
if ( m_count = i_search ) then
|
||||
if ( m_line like 'pr%' ) then
|
||||
n := length( 'procedure ' );
|
||||
elsif ( m_line like 'fun%' ) then
|
||||
n := length( 'function ' );
|
||||
elsif ( m_line like 'package body%' ) then
|
||||
n := length( 'package body ' );
|
||||
elsif ( m_line like 'pack%' ) then
|
||||
n := length( 'package ' );
|
||||
else
|
||||
n := length( 'anonymous block ' );
|
||||
end if;
|
||||
m_line := substr( m_line, n );
|
||||
n := instr( m_line, '.' );
|
||||
o_schema := ltrim(rtrim(substr( m_line, 1, n-1 )));
|
||||
o_module := ltrim(rtrim(substr( m_line, n+1 )));
|
||||
end if;
|
||||
m_count := m_count + 1;
|
||||
end if;
|
||||
end loop;
|
||||
end stack_search;
|
||||
|
||||
function getloglevel
|
||||
RETURN INTEGER
|
||||
as
|
||||
|
||||
m_level INTEGER;
|
||||
|
||||
begin
|
||||
|
||||
select levelid
|
||||
into m_level
|
||||
from errorlog_level;
|
||||
|
||||
return m_level;
|
||||
|
||||
exception
|
||||
when others then
|
||||
return 0;
|
||||
|
||||
end getloglevel;
|
||||
|
||||
|
||||
function reraisecheck ( p_package varchar2 default NULL, p_procedure varchar2 default NULL)
|
||||
return INTEGER
|
||||
as
|
||||
|
||||
PRAGMA AUTONOMOUS_TRANSACTION;
|
||||
|
||||
m_unlimited_errors INTEGER;
|
||||
m_errorlimit INTEGER;
|
||||
m_errorcount INTEGER;
|
||||
begin
|
||||
|
||||
if (p_package IS NULL or p_procedure IS NULL) then
|
||||
return 1;
|
||||
else
|
||||
update errorlog_reraise_limits
|
||||
set errorcount = errorcount + 1
|
||||
where package = p_package and
|
||||
procedure = p_procedure;
|
||||
|
||||
commit;
|
||||
|
||||
if (sql%rowcount = 0) then
|
||||
return 1;
|
||||
else
|
||||
select unlimited_flag, errorlimit, errorcount
|
||||
into m_unlimited_errors, m_errorlimit, m_errorcount
|
||||
from errorlog_reraise_limits
|
||||
where package = p_package and
|
||||
procedure = p_procedure;
|
||||
|
||||
if (m_unlimited_errors = 1) then
|
||||
return 0;
|
||||
else
|
||||
if (m_errorcount <= m_errorlimit) then
|
||||
return 0;
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
end if;
|
||||
|
||||
|
||||
|
||||
return 1;
|
||||
|
||||
exception
|
||||
when others then
|
||||
return 1;
|
||||
|
||||
end reraisecheck;
|
||||
|
||||
end;
|
||||
/
|
||||
Reference in New Issue
Block a user