Je voulais imprimer la valeur d'une variable particulière qui est à 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
.
Vous devez activer dbms_output. Dans Oracle SQL Developer:
En SQL * Plus:
SET SERVEROUTPUT ON
SQL Developer semble ne générer le texte DBMS_OUTPUT que lorsque vous avez explicitement activé le volet Fenêtre DBMS_OUTPUT.
Allez dans (Menu) VIEW -> Dbms_output pour appeler le volet.
Cliquez sur le signe vert plus pour activer la sortie pour 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 attendue.
Faire la sortie du serveur sur Tout d'abord
SET SERVEROUTPUT on
alors
Accédez à la fenêtre Sortie du SGBD (Affichage-> Sortie du SGBD).
puis appuyez Ctrl+N pour connecter le serveur
Il y a 2 options:
set serveroutput on format wrapped;
ou
Ouvrez le menu "Affichage" et cliquez sur "Sortie dbms". 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).
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. Ça marche et ça sort aussi ...