Set Define Off
create or replace package Parse_Message
is
Bad_Format exception; pragma exception_init ( Bad_Format, -20999 );
function Verify_Format ( p_msg in varchar2, p_tag in varchar2 )
return varchar2;
function Extract_Value ( p_msg in varchar2, p_tag in varchar2 )
return varchar2;
end Parse_Message;
/
Show Errors
create or replace package body Parse_Message
is
function Verify_Format ( p_msg in varchar2, p_tag in varchar2 )
return varchar2
is
v_return_msg varchar2(32767) :=
Replace ( Replace ( Lower(p_msg), ' ', null ), chr(10), null );
v_close_tag varchar2(80) := Tags.Close ( p_tag );
v_open_tag_length integer := Length ( p_tag );
v_close_tag_length integer := Length ( v_close_tag );
v_expected integer;
v_errm_tag varchar2(80);
begin
if not Instr ( v_return_msg, p_tag, 1, 1 ) = 1
then
v_errm_tag := Replace ( Replace ( p_tag, '<', '<' ), '>', '>' );
raise_application_error ( -20999,
'Verify_Format: opening ' || v_errm_tag || ' not found' );
end if;
v_return_msg := Substr ( v_return_msg, v_open_tag_length+1 );
v_expected := 1 + Length (v_return_msg) - v_close_tag_length;
if not Instr ( v_return_msg, v_close_tag, 1, 1 ) = v_expected
then
v_errm_tag := Replace ( Replace ( v_close_tag, '<', '<' ), '>', '>' );
raise_application_error ( -20999,
'Verify_Format: closing ' || v_errm_tag || ' not found' );
end if;
v_return_msg := Substr ( v_return_msg, 1, v_expected-1 );
v_return_msg := Replace ( v_return_msg, '><', '>' || chr(10) || '<' );
return v_return_msg;
end Verify_Format;
function Extract_Value ( p_msg in varchar2, p_tag in varchar2 )
return varchar2
is
v_return_value varchar2(32767);
v_start integer;
v_end integer;
v_errm_tag varchar2(80);
begin
v_start := Instr ( p_msg, p_tag, 1, 1 );
if v_start < 1
then
v_errm_tag := Replace ( Replace ( p_tag, '<', '<' ), '>', '>' );
raise_application_error ( -20999,
'Verify_Format: opening ' || v_errm_tag || ' not found' );
end if;
v_start := v_start + Length(p_tag);
v_end := Instr ( p_msg, Tags.Close(p_tag), 1, 1 );
if v_end < 1
then
v_errm_tag := Replace ( Replace ( Tags.Close(p_tag), '<', '<' ), '>', '>' );
raise_application_error ( -20999,
'Verify_Format: closing ' || v_errm_tag || ' not found' );
end if;
v_return_value := Substr ( p_msg, v_start, v_end-v_start );
return v_return_value;
end Extract_Value;
end Parse_Message;
/
Show Errors