Drucken des Werts einer Variablen in SQL Developer


102

Ich wollte den Wert einer bestimmten Variablen drucken, die sich in einem anonymen Block befindet. Ich verwende Oracle SQL Developer. Ich habe es versucht dbms_output.put_line. Aber es funktioniert nicht. Der Code, den ich verwende, wird unten angezeigt.

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;

Und ich bekomme die Ausgabe nur als anonymous block completed.


Die Ausgabe wird am Ende / Ende des Programms geleert, so funktioniert es. Sie können nicht spülen, um während des Laufens anzuzeigen. Schauen Sie in Protokolltabellen (autonome Transaktion) nach, um zu sehen, was passiert, während ein Programm ausgeführt wird
tbone

Verwenden Sie den integrierten Debugger und gehen Sie durch Ihren Block. Es zeigt den Status aller Variablen.
Wolf

5
SET SERVEROUTPUT ON; - Semikolon hinzufügen, ALL auswählen und im Entwickler ausführen, für mich funktioniert es gut,
Praveenkumar_V

Antworten:


203

Sie müssen dbms_output aktivieren. In Oracle SQL Developer:

  1. Zeigen Sie das Fenster DBMS-Ausgabe an (Ansicht-> DBMS-Ausgabe).
  2. Klicken Sie oben im Dbms-Ausgabefenster auf die Schaltfläche "+" und wählen Sie im daraufhin angezeigten Dialogfeld eine offene Datenbankverbindung aus.

In SQL * Plus:

 SET SERVEROUTPUT ON

In Version 1.5.5 scheint diese Option unter Ansicht nicht verfügbar zu sein. Es gibt Verbindungen, Dateien, Berichte ... Statusleiste, Symbolleisten, Aktualisieren, aber keine DBMS-Ausgabe. Viele Dinge unter Einstellungen, aber ich sehe immer noch keine Option für die Ausgabe.
Ruffin

1
@ Ruffin: v1.5.5 ist 3 Jahre alt. Ich verwende v3.0 und die aktuelle Version scheint v3.1 zu sein.
Klas Lindbäck

/ nickt Wir stecken bei 1.5.5 fest - wenn Sie die Antwort zur Hand hätten, würde ich sie nehmen, aber sonst nps. Vielen Dank!
Ruffin

Ich habe die Option "SET SERVEROUTPUT ON" in der ersten Zeile der SQL-Datei gesetzt.
Samih A

Ich danke dir sehr!
Amazigh.Ca

18

SQL Developer gibt den DBMS_OUTPUT-Text anscheinend nur aus, wenn Sie den Fensterbereich DBMS_OUTPUT explizit aktiviert haben.

Gehen Sie zu (Menü) ANSICHT -> Dbms_output, um den Bereich aufzurufen.

Klicken Sie auf das grüne Pluszeichen, um die Ausgabe für Ihre Verbindung zu aktivieren, und führen Sie dann den Code aus.

BEARBEITEN: Vergessen Sie nicht, die Puffergröße entsprechend der erwarteten Ausgabemenge einzustellen.


6

Stellen Sie zunächst die Serverausgabe ein

  1. SET SERVEROUTPUT on dann

  2. Wechseln Sie zum Fenster DBMS-Ausgabe (Ansicht-> DBMS-Ausgabe).

  3. Drücken Sie dann Ctrl+, Num den Server zu verbinden


3

Es gibt 2 Möglichkeiten:

set serveroutput on format wrapped;

oder

Öffnen Sie das Menü "Ansicht" und klicken Sie auf "DBMS-Ausgabe". Sie sollten ein DBMS-Ausgabefenster am unteren Rand des Arbeitsblatts erhalten. Sie müssen dann die Verbindung hinzufügen (aus irgendeinem Grund erfolgt dies nicht automatisch).


1

1) Gehen Sie zum Menü anzeigen.
2) Wählen Sie den Menüpunkt DBMS_OUTPUT.
3) Drücken Sie Ctrl+ Nund wählen Sie den Verbindungseditor.
4) Führen Sie den Befehl SET SERVEROUTPUT ON aus.
5) Führen Sie dann Ihr PL / SQL-Skript aus.

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein


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;

Ich habe Schließen des zweiten Cursors hinzugefügt. Es funktioniert und wird auch ausgegeben ...


-1

Wählen Sie im Menü Ansicht und> DBMS-Ausgabe und


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.