Imprimir el valor de una variable en SQL Developer


102

Quería imprimir el valor de una variable en 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.

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 obtengo la salida solo como anonymous block completed.


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

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

5
ACTIVAR SALIDA DE SERVIDOR; - agregue punto y coma, seleccione TODO y ejecute el desarrollador, para mí funciona bien,
Praveenkumar_V

Respuestas:


203

Necesita activar dbms_output. En Oracle SQL Developer:

  1. Muestre la ventana Salida DBMS (Ver-> Salida DBMS).
  2. Presione el botón "+" en la parte superior de la ventana de salida 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

En la versión 1.5.5, parece que no tengo esa opción en Ver. Hay conexiones, archivos, informes ... barra de estado, barras de herramientas, actualización, pero no salida DBMS. Hay muchas cosas en las preferencias, pero todavía no veo una opción para la salida.
Ruffin

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

/ asiente Estamos atascados en 1.5.5 - si tuvieras la respuesta a mano, la tomaría, pero nps de lo contrario. ¡Gracias!
Ruffin

Establecí la opción "SET SERVEROUTPUT ON" en la primera línea del archivo sql.
Samih A

Muchas gracias!
Amazigh.Ca

18

SQL Developer parece generar solo el texto DBMS_OUTPUT cuando ha activado explícitamente el panel de la ventana DBMS_OUTPUT.

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

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

EDITAR: No olvide configurar el tamaño del búfer de acuerdo con la cantidad de salida que espera.


6

Hacer que la salida del servidor sea en primer lugar

  1. SET SERVEROUTPUT on luego

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

  3. luego presione Ctrl+ Npara conectar el servidor


3

Hay 2 opciones:

set serveroutput on format wrapped;

o

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


1

1) Vaya al menú de visualización.
2) Seleccione el elemento de menú DBMS_OUTPUT.
3) Presione Ctrl+ Ny seleccione el editor de conexiones.
4) Ejecute el comando SET SERVEROUTPUT ON.
5) Luego ejecute su script PL / SQL.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí


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 agregado Cierre del segundo cursor. Funciona y obtiene resultados también ...



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.