jueves, 9 de julio de 2009

Imprimir con PL/SQL: dbms_output.put_line




 

 

 

 

 

 

 

Introducción


Hoy vamos a ver la manera de imprimir por pantalla en PL/SQL. Lo haremos mediante put_line del paquete dbms_output. Éste es un método muy utilizado, sobretodo para realizar operaciones de depuración. Estudiaremos dos ejemplos muy sencillos.



El código


Concatenar una cadena de caracteres y un número, y mostrarlo:

Los string van entre comillas simples y se concatenan mediante ||. La función to_char convierte un número en cadena de caracteres.

 
  
   SQL> 
   SQL> set serveroutput on 
   SQL> declare 
   2 myNumber number := 1; 
   3 begin 
   4 myNumber := 1 + 1; 
   5 dbms_output.put_line( '1 + 1 = ' || to_char( myNumber ) || '!' ); 
   6 exception 
   7 when others then 
   8 dbms_output.put_line( 'We encountered an exception!' ); 
   9 end; 
   10 / 
   1 + 1 = 2! 
     
   PL/SQL procedure successfully completed. 
     
   SQL> 
   SQL> 
    
           

Mostrar valor de una variable:

Se muestra los distintos valores de una variable en las distintas iteracciones del bucle. Como hemos dicho antes, puede ser útil a la hora de depurar nuestros procedimientos:

 
  
   SQL> 
   SQL> --Basic loop 
   SQL> 
   SQL> 
   SQL> SET SERVEROUTPUT ON 
   SQL> DECLARE 
   2 x NUMBER := 1; 
   3 BEGIN 
   4 LOOP 
   5 DBMS_OUTPUT.PUT_LINE('This loop has executed'||TO_CHAR(x)||' time(s)'); 
   6 x := x +1; 
   7 EXIT WHEN x > 5; 
   8 END LOOP; 
   9 END; 
   10 
   11 
   12 / 
   This loop has executed1 time(s) 
   This loop has executed2 time(s) 
   This loop has executed3 time(s) 
   This loop has executed4 time(s) 
   This loop has executed5 time(s) 
     
     
   PL/SQL procedure successfully completed. 
    
           



Fuentes


http://www.java2s.com/Code/Oracle/PL-SQL/DBMS_OUTPUT.htm




3 Comentarios:

1969/1970 dijo...

Hi!

Siempre se tiene que colocar SET SERVEROUTPUT ON antes de cada bloque?

Felipe Martínez D. dijo...

Hola

La salida puede estar limitada a un número bytes por defecto y quizás sea necesario poner "SET SERVEROUTPUT ON" en cada bloque. No obstante, en la versión 10gR2 ya se puede utilizar "SET SERVEROUTPUT ON SIZE UNLIMITED" para que soporte un tamaño ilimitado y así evitar errores del tipo buffer overflow.

Saludos.

Unknown dijo...

esto puede afectar la memoria del servidor si el dbms_output esta en un loop.

Publicar un comentario

Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO