Impression de la valeur d'une variable dans SQL Developer


102

Je voulais imprimer la valeur d'une variable particulière qui se trouve à l'intérieur d'un bloc anonyme. J'utilise Oracle SQL Developer. J'ai essayé d'utiliser dbms_output.put_line. Mais ça ne fonctionne pas. Le code que j'utilise est indiqué ci-dessous.

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;

Et je reçois la sortie uniquement en tant que anonymous block completed.


la sortie est vidée à la fin / à la fin du programme, c'est ainsi que cela fonctionne. Vous ne pouvez pas rincer pour afficher pendant l'exécution. Regardez dans les tables de journal (transaction autonome) pour voir ce qui se passe pendant l'exécution d'un programme
tbone

Pourquoi ne pas utiliser le débogueur intégré et parcourir votre bloc. Il montre l'état de toutes les variables.
Wolf

5
SET SERVEROUTPUT ON; - ajouter un point-virgule, sélectionnez TOUT et exécutez dans le développeur, pour moi, cela fonctionne bien,
Praveenkumar_V

Réponses:


203

Vous devez activer dbms_output. Dans Oracle SQL Developer:

  1. Affichez la fenêtre Sortie du SGBD (Affichage-> Sortie du SGBD).
  2. Appuyez sur le bouton «+» en haut de la fenêtre Sortie Dbms, puis sélectionnez une connexion de base de données ouverte dans la boîte de dialogue qui s'ouvre.

Dans SQL * Plus:

 SET SERVEROUTPUT ON

Dans la version 1.5.5, je ne semble pas avoir cette option sous Affichage. Il y a des connexions, des fichiers, des rapports ... Barre d'état, barres d'outils, actualisation, mais pas de sortie SGBD. Beaucoup de choses sous les préférences, mais je ne vois toujours pas d'option pour la sortie.
ruffin le

1
@ruffin: la v1.5.5 a 3 ans. J'utilise la v3.0 et la version actuelle semble être la v3.1.
Klas Lindbäck

/ hoche la tête Nous sommes bloqués sur 1.5.5 - si vous aviez la réponse sous la main, je la prendrais, mais nps sinon. Merci!
ruffin le

J'ai mis l'option "SET SERVEROUTPUT ON" sur la première ligne du fichier sql.
Samih A

Merci beaucoup!
Amazigh.Ca

18

SQL Developer semble afficher uniquement le texte DBMS_OUTPUT lorsque vous avez explicitement activé le volet de la fenêtre DBMS_OUTPUT.

Allez dans (Menu) VIEW -> Dbms_output pour appeler le volet.

Cliquez sur le signe Green Plus pour activer la sortie de votre connexion, puis exécutez le code.

EDIT: N'oubliez pas de définir la taille de la mémoire tampon en fonction de la quantité de sortie que vous attendez.


6

Faire la sortie du serveur sur Tout d'abord

  1. SET SERVEROUTPUT on puis

  2. Accédez à la fenêtre Sortie du SGBD (Affichage-> Sortie du SGBD)

  3. puis appuyez sur Ctrl+ Npour connecter le serveur


3

Il existe 2 options:

set serveroutput on format wrapped;

ou

Ouvrez le menu 'view' et cliquez sur 'dbms output'. Vous devriez obtenir une fenêtre de sortie dbms au bas de la feuille de calcul. Vous devez ensuite ajouter la connexion (pour une raison quelconque, cela ne se fait pas automatiquement).


1

1) Allez au menu de visualisation.
2) Sélectionnez l'élément de menu DBMS_OUTPUT.
3) Appuyez sur Ctrl+ Net sélectionnez l'éditeur de connexion.
4) Exécutez la commande SET SERVEROUTPUT ON.
5) Exécutez ensuite votre script PL / SQL.

entrez la description de l'image ici entrez la description de l'image ici


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;

J'ai ajouté la fermeture du deuxième curseur. Cela fonctionne et obtient également une sortie ...


-1

sélectionnez Affichage -> Sortie SGBD dans le menu et


-1

Accédez à la fenêtre Sortie du SGBD (Affichage-> Sortie du SGBD).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.