@@ -77,50 +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 := '''', a_max_output_len in number := gc_max_output_string_length) return varchar2 is
81- l_len integer := coalesce(length(a_value),0);
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
8285 l_result varchar2(32767);
83- l_max_input_string_length integer := a_max_output_len - 2;--we need to remove 2 chars for quotes around string
84- l_overflow_substr_len integer := l_max_input_string_length - length(gc_more_data_string);
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;
8589 begin
86- if l_len = 0 then
90+ if c_length = 0 then
8791 l_result := gc_null_string;
88- elsif l_len <= l_max_input_string_length then
89- 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 );
9094 else
91- l_result := surround_with(substr(a_value,1,l_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;
9296 end if ;
9397 return l_result;
9498 end;
9599
96- function to_string(a_value clob, a_qoute_char varchar2 := '''') return varchar2 is
97- l_len integer := coalesce(dbms_lob.getlength(a_value), 0);
98- 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;
99109 begin
100110 if a_value is null then
101111 l_result := gc_null_string;
102- elsif l_len = 0 then
112+ elsif c_length = 0 then
103113 l_result := gc_empty_string;
104- elsif l_len <= gc_max_input_string_length then
105- 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 );
106116 else
107- 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;
108118 end if;
109119 return l_result;
110120 end;
111121
112- function to_string(a_value blob, a_qoute_char varchar2 := '''') return varchar2 is
113- l_len integer := coalesce(dbms_lob.getlength(a_value), 0);
114- 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;
115131 begin
116132 if a_value is null then
117133 l_result := gc_null_string;
118- elsif l_len = 0 then
134+ elsif c_length = 0 then
119135 l_result := gc_empty_string;
120- elsif l_len <= gc_max_input_string_length then
121- 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 );
122138 else
123- 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 )) );
124140 end if ;
125141 return l_result;
126142 end;
0 commit comments