SQL> l
1 CREATE OR REPLACE FUNCTION Display_Message (
2 OUTPUT_TEXT IN VARCHAR2
3 ) RETURN NUMBER IS
4
5 --DECLARE
6 i NUMBER (10) DEFAULT 1;
7 original_text_length NUMBER (20) DEFAULT 0;
8
9 BEGIN
10 -- Break string into chunks of 255 characters and then display thru DBMS_OUTPUT.PUT_LINE
11 original_text_length := LENGTH (output_text);
12 DBMS_OUTPUT.PUT_LINE(original_text_length);
13
14 WHILE i <= original_text_length LOOP
15
16 DBMS_OUTPUT.PUT_LINE (SUBSTR (output_text, i, 255));
17 i := i + 255;
18
19 END LOOP;
20
21 RETURN i;
22
23* END;
SQL> /
Function created.
*** NULL test ***
SQL> declare
2 a number;
3 begin
4 a := display_message(null);
5 end;
6 /
PL/SQL procedure successfully completed.
*** Long test ***
SQL> declare
2 a number;
3 begin
4 a := display_message(lpad('a',10000,'a'));
5 end;
6 /
10000
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaa
(... 37 additional sections that look like the 'a' output above)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
PL/SQL procedure successfully completed.
I was, however, able to re-create your error message with the following code:
SQL> exec dbms_output.put_line(lpad('a',501,'a'))
BEGIN dbms_output.put_line(lpad('a',501,'a')); END;
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.DBMS_OUTPUT", line 64
ORA-06512: at line 1
If I reduce the length of the output string (by 1) to 500, we see a different error (which we actually expect due to the 255-character maximum of a single dbms_output.put_line string.)
SQL> exec dbms_output.put_line(lpad('a',500,'a'))
BEGIN dbms_output.put_line(lpad('a',500,'a')); END;
*
ERROR at line 1:
ORA-20000: ORU-10028: line length overflow, limit of 255 bytes per line
ORA-06512: at "SYS.DBMS_OUTPUT", line 99
ORA-06512: at "SYS.DBMS_OUTPUT", line 65
ORA-06512: at line 1
So, since I do not have your data to reproduce your actual environment, I must leave the follow-on troubleshooting to you (unless another Tek-Tip colleague can see something else from the tests/facts above).
[santa]Mufasa
(aka Dave of Sandy, Utah, USA @ 18:14 (23Jan04) GMT, 11:14 (23Jan04) Mountain Time)