@@ -77,48 +77,66 @@ create or replace package body ut_utils is
7777 $end
7878 end;
7979
80- function to_string(a_value varchar2, a_qoute_char varchar2 := '''') return varchar2 is
81- l_len integer := coalesce(length(a_value),0);
82- l_result varchar2(32767);
83- begin
84- if l_len = 0 then
80+ function to_string(
81+ a_value varchar2,
82+ a_quote_char varchar2 := '''',
83+ a_max_output_len in number := gc_max_output_string_length
84+ ) return varchar2 is
85+ l_result varchar2(32767);
86+ c_length constant integer := coalesce( length( a_value ), 0 );
87+ c_max_input_string_length constant integer := a_max_output_len - coalesce( length( a_quote_char ) * 2, 0 );
88+ c_overflow_substr_len constant integer := c_max_input_string_length - gc_more_data_string_len;
89+ begin
90+ if c_length = 0 then
8591 l_result := gc_null_string;
86- elsif l_len <= gc_max_input_string_length then
87- l_result := surround_with(a_value, a_qoute_char );
92+ elsif c_length <= c_max_input_string_length then
93+ l_result := surround_with(a_value, a_quote_char );
8894 else
89- l_result := surround_with(substr(a_value,1,gc_overflow_substr_len),a_qoute_char ) || gc_more_data_string;
95+ l_result := surround_with(substr(a_value, 1, c_overflow_substr_len ), a_quote_char ) || gc_more_data_string;
9096 end if ;
9197 return l_result;
9298 end;
9399
94- function to_string(a_value clob, a_qoute_char varchar2 := '''') return varchar2 is
95- l_len integer := coalesce(dbms_lob.getlength(a_value), 0);
96- l_result varchar2(32767);
100+ function to_string(
101+ a_value clob,
102+ a_quote_char varchar2 := '''',
103+ a_max_output_len in number := gc_max_output_string_length
104+ ) return varchar2 is
105+ l_result varchar2(32767);
106+ c_length constant integer := coalesce(dbms_lob.getlength(a_value), 0);
107+ c_max_input_string_length constant integer := a_max_output_len - coalesce( length( a_quote_char ) * 2, 0 );
108+ c_overflow_substr_len constant integer := c_max_input_string_length - gc_more_data_string_len;
97109 begin
98110 if a_value is null then
99111 l_result := gc_null_string;
100- elsif l_len = 0 then
112+ elsif c_length = 0 then
101113 l_result := gc_empty_string;
102- elsif l_len <= gc_max_input_string_length then
103- l_result := surround_with(a_value,a_qoute_char );
114+ elsif c_length <= c_max_input_string_length then
115+ l_result := surround_with(a_value,a_quote_char );
104116 else
105- l_result := surround_with(dbms_lob.substr(a_value, gc_overflow_substr_len),a_qoute_char ) || gc_more_data_string;
117+ l_result := surround_with(dbms_lob.substr(a_value, c_overflow_substr_len), a_quote_char ) || gc_more_data_string;
106118 end if;
107119 return l_result;
108120 end;
109121
110- function to_string(a_value blob, a_qoute_char varchar2 := '''') return varchar2 is
111- l_len integer := coalesce(dbms_lob.getlength(a_value), 0);
112- l_result varchar2(32767);
122+ function to_string(
123+ a_value blob,
124+ a_quote_char varchar2 := '''',
125+ a_max_output_len in number := gc_max_output_string_length
126+ ) return varchar2 is
127+ l_result varchar2(32767);
128+ c_length constant integer := coalesce(dbms_lob.getlength(a_value), 0);
129+ c_max_input_string_length constant integer := a_max_output_len - coalesce( length( a_quote_char ) * 2, 0 );
130+ c_overflow_substr_len constant integer := c_max_input_string_length - gc_more_data_string_len;
113131 begin
114132 if a_value is null then
115133 l_result := gc_null_string;
116- elsif l_len = 0 then
134+ elsif c_length = 0 then
117135 l_result := gc_empty_string;
118- elsif l_len <= gc_max_input_string_length then
119- l_result := surround_with(rawtohex(a_value),a_qoute_char );
136+ elsif c_length <= c_max_input_string_length then
137+ l_result := surround_with(rawtohex(a_value),a_quote_char );
120138 else
121- l_result := to_string( rawtohex(dbms_lob.substr(a_value, gc_overflow_substr_len )) );
139+ l_result := to_string( rawtohex(dbms_lob.substr(a_value, c_overflow_substr_len )) );
122140 end if ;
123141 return l_result;
124142 end;
0 commit comments