HAI LETTO L'ARTICOLO DI OGGI??? CLICCA QUI

Cultura informatica: DBMS_OUTPUT superare il limite dei 255 caratteri

Mi e’ capitato in questi giorni, dovevo stampare i dati di una variabile Varchar e ricevevo continuamente l’errore:
ORA-20000: ORU-10028: line length overflow, limit of 255 chars per line
In pratica su oracle il comando DBMS_OUTPUT.put_line scrive un set di caratteri fino a 255 bytes per riga.

Per risolvere ho trovato una procedurina da sostituire alla DBMS_OUTPUT per far stampare tutto lo stream di bytes.
Chiamata della procedura:

declare
esito varchar2(8000);
output varchar2(8000);

BEGIN
PROCEDURA_DA_ESEGUIRE(‘STRINGA’,esito,output) ;

DBMS_OUTPUT.put_line (‘OUTPUT1: [‘ || esito ||’]’);
put_lines (‘OUTPUT2: [‘ || output ||’]’); — Nuova procedura da chiamare
DBMS_OUTPUT.put_line (‘OUTPUT2: [‘ || output ||’]’); — Questo va in errore
END;

Ecco il codice della procedura put_lines che risolve il problema. In pratica spezzetta il testo da stampare in righe da 255 caratteri.
In questa maniera risolviamo il problema di stampare su Oracle piu’ di 255 caratteri per riga con il
DBMS_OUTPUT.put_line

CREATE OR REPLACE PROCEDURE IUSSYS.put_lines (sText IN VARCHAR2)
AS
nCharsInText PLS_INTEGER;
nPos PLS_INTEGER;
c_nOutputLimit CONSTANT PLS_INTEGER := 255;
sBloc VARCHAR2 (255);
BEGIN
nPos := 1;
sBloc := ”;

SELECT LENGTH (sText)
INTO nCharsInText
FROM DUAL;

WHILE (nPos < = nCharsInText) LOOP SELECT SUBSTR (sText, nPos, c_nOutputLimit) INTO sBloc FROM DUAL; DBMS_OUTPUT.PUT_LINE (sBloc); nPos := nPos + c_nOutputLimit; END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLERRM); END put_lines; /

(Visited 126 times, 1 visits today)
4

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *