Stampa del valore di una variabile in SQL Developer


102

Volevo stampare il valore di una particolare variabile che si trova all'interno di un blocco anonimo. Sto usando Oracle SQL Developer. Ho provato a usare dbms_output.put_line. Ma non sta funzionando. Il codice che sto usando è mostrato sotto.

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;

E ottengo l'output solo come anonymous block completed.


l'output viene cancellato alla fine / termine del programma, questo è il modo in cui funziona. Non puoi irrigare per visualizzare mentre corri. Guarda nelle tabelle di log (transazione autonoma) per vedere cosa succede mentre un programma è in esecuzione
tbone

Perché non utilizzare il debugger integrato e passare attraverso il blocco. Mostra lo stato di tutte le variabili.
Wolf

5
SET SERVEROUTPUT ON; - aggiungi punto e virgola, seleziona TUTTO ed esegui nello sviluppatore, per me funziona bene,
Praveenkumar_V

Risposte:


203

Devi attivare dbms_output. In Oracle SQL Developer:

  1. Mostra la finestra Output DBMS (Visualizza-> Output DBMS).
  2. Premere il pulsante "+" nella parte superiore della finestra di output Dbms e quindi selezionare una connessione database aperta nella finestra di dialogo che si apre.

In SQL * Plus:

 SET SERVEROUTPUT ON

Nella versione 1.5.5, non mi sembra di avere questa opzione in Visualizza. Ci sono connessioni, file, rapporti ... Barra di stato, barre degli strumenti, Aggiorna, ma nessun output DBMS. Molte cose nelle preferenze, ma ancora non vedo un'opzione per l'output.
ruffin

1
@ruffin: v1.5.5 ha 3 anni. Sto usando la v3.0 e la versione corrente sembra essere la v3.1.
Klas Lindbäck

/ annuisce Siamo bloccati sulla 1.5.5 - se avessi la risposta a portata di mano, la prenderei, ma altrimenti nps. Grazie!
ruffin

Ho impostato l'opzione "SET SERVEROUTPUT ON" sulla prima riga del file sql.
Samih A

Grazie mille!
Amazigh.Ca

18

SQL Developer sembra emettere solo il testo DBMS_OUTPUT quando hai esplicitamente attivato il riquadro della finestra DBMS_OUTPUT.

Vai a (Menu) VIEW -> Dbms_output per richiamare il riquadro.

Fare clic sul segno più verde per abilitare l'output per la connessione e quindi eseguire il codice.

EDIT: non dimenticare di impostare la dimensione del buffer in base alla quantità di output che ti aspetti.


6

Crea l'output del server su Prima di tutto

  1. SET SERVEROUTPUT on poi

  2. Vai alla finestra Output DBMS (Visualizza-> Output DBMS)

  3. quindi premere Ctrl+ Nper connettere il server


3

Ci sono 2 opzioni:

set serveroutput on format wrapped;

o

Apri il menu "Visualizza" e fai clic su "Uscita dbms". Dovresti ottenere una finestra di output dbms nella parte inferiore del foglio di lavoro. È quindi necessario aggiungere la connessione (per qualche motivo ciò non viene fatto automaticamente).


1

1) Vai al menu di visualizzazione.
2) Selezionare la voce di menu DBMS_OUTPUT.
3) Premere Ctrl+ Ne selezionare editor di connessione.
4) Eseguire il comando SET SERVEROUTPUT ON.
5) Quindi esegui il tuo script PL / SQL.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


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;

Ho aggiunto Chiudi del secondo cursore. Funziona e ottiene anche output ...


-1

selezionare Visualizza -> Uscita DBMS nel menu e


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.