2011-10-25 222 views
73

Quería imprimir el valor de una variable particular que está dentro de un bloque anónimo. Estoy usando Oracle SQL Developer. Intenté usar dbms_output.put_line. Pero no está funcionando. El código que estoy usando se muestra a continuación.Imprimir el valor de una variable en SQL Developer

SET SERVEROUTPUT ON 

DECLARE 

    CTABLE USER_OBJECTS.OBJECT_NAME%TYPE; 
    CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE; 
    V_ALL_COLS VARCHAR2(500); 

    CURSOR CURSOR_TABLE 
    IS 
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE' 
    AND OBJECT_NAME LIKE 'tb_prm_%'; 

    CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2) 
    IS 
    SELECT COLUMN_NAME 
    FROM ALL_TAB_COLS 
    WHERE TABLE_NAME = V_TABLE_NAME; 

BEGIN 

    OPEN CURSOR_TABLE; 

    LOOP 
    FETCH CURSOR_TABLE INTO CTABLE; 
    EXIT WHEN CURSOR_TABLE%NOTFOUND; 

    OPEN CURSOR_COLUMNS (CTABLE); 

    V_ALL_COLS := NULL; 

    LOOP 
     FETCH CURSOR_COLUMNS INTO CCOLUMN; 
     V_ALL_COLS := V_ALL_COLS || CCOLUMN; 
     IF CURSOR_COLUMNS%FOUND THEN 
     V_ALL_COLS := V_ALL_COLS || ', '; 
     ELSE 
     EXIT; 
     END IF; 
    END LOOP; 

    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS); 

    END LOOP; 
    CLOSE CURSOR_TABLE; 

END; 

Y yo estoy recibiendo la salida sólo como anonymous block completed.

+0

La salida se vacía al final/terminación del programa, así es como funciona. No se puede descargar para mostrar mientras se está ejecutando.Mire en las tablas de registro (transacción autónoma) para ver qué ocurre mientras se ejecuta un programa – tbone

+0

¿Por qué no utilizar el depurador incorporado y recorrer su bloque? Muestra el estado de todas las variables. – Wolf

+2

SET SERVEROUTPUT ON; --agregar dos puntos, seleccionar TODO y ejecutar en desarrollador, para mí funciona bien, –

Respuesta

139

Debe activar dbms_output. En Oracle SQL Developer:

  1. Muestra la ventana Salida DBMS (Ver-> Salida DBMS).
  2. Presione el botón "+" en la parte superior de la ventana Salida de Dbms y luego seleccione una conexión de base de datos abierta en el cuadro de diálogo que se abre.

En SQL * Plus:

SET SERVEROUTPUT ON 
+0

En la versión 1.5.5, no parece tener esa opción en Vista. Hay conexiones, archivos, informes ... Barra de estado, barras de herramientas, actualizar, pero no hay salida DBMS. Un montón de cosas en las preferencias, pero todavía no veo una opción para la salida. – ruffin

+0

@ruffin: v1.5.5 tiene 3 años. Estoy usando v3.0, y la versión actual parece ser v3.1. –

+0

/nods Estamos atrapados en 1.5.5 - si tuviera la respuesta a mano, lo tomaría, pero de lo contrario nps. ¡Gracias! – ruffin

15

SQL Developer parece única salida del texto DBMS_OUTPUT cuando se ha activado de forma explícita en el cristal de la ventana DBMS_OUTPUT.

Ir a (Menú) VER -> Dbms_output para invocar el panel.

Haga clic en el signo más verde para habilitar la salida de su conexión y luego ejecute el código.

EDITAR: No olvide establecer el tamaño del búfer de acuerdo con la cantidad de salida que está esperando.

0

seleccione Ver -> Salida de DBMS en el menú y

0

Ir a la ventana de salida de DBMS (Ver-> Salida DBMS).

3

Hay otra opción:

set serveroutput on format wraped; 

o

Abrir el menú 'Ver' y haga clic en 'salida de DBMS. Debería obtener una ventana de salida dbms en la parte inferior de la hoja de trabajo. Luego necesita agregar la conexión (por alguna razón esto no se hace automáticamente).

5

salida del servidor realice en primer lugar

  1. SET SERVEROUTPUT on continuación

  2. Ir a la ventana de salida de DBMS (Ver-> Salida DBMS)

  3. entonces Prensa Ctrl +N para conectar el servidor

0
DECLARE 

    CTABLE USER_OBJECTS.OBJECT_NAME%TYPE; 
    CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE; 
    V_ALL_COLS VARCHAR2(5000); 

    CURSOR CURSOR_TABLE 
    IS 
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE' 
    AND OBJECT_NAME LIKE 'STG%'; 

    CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2) 
    IS 
    SELECT COLUMN_NAME 
    FROM ALL_TAB_COLS 
    WHERE TABLE_NAME = V_TABLE_NAME; 

BEGIN 

    OPEN CURSOR_TABLE; 
    LOOP 
    FETCH CURSOR_TABLE INTO CTABLE; 

    OPEN CURSOR_COLUMNS (CTABLE); 
    V_ALL_COLS := NULL; 
    LOOP 

     FETCH CURSOR_COLUMNS INTO CCOLUMN; 
     V_ALL_COLS := V_ALL_COLS || CCOLUMN; 
     IF CURSOR_COLUMNS%FOUND THEN 
     V_ALL_COLS := V_ALL_COLS || ', '; 
     ELSE 
     EXIT; 
     END IF; 
    END LOOP; 
    close CURSOR_COLUMNS ; 
    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS); 
    EXIT WHEN CURSOR_TABLE%NOTFOUND; 
    END LOOP;`enter code here` 
    CLOSE CURSOR_TABLE; 

END; 

He añadido Close of second cursor. Está trabajando y obteniendo salida también ...

Cuestiones relacionadas