Lors de l'exécution du code suivant, il indique simplement que la procédure est terminée et n'imprime pas l'information que je souhaite (nom, prénom, nom), puis les autres valeurs de la requête de sélection dans un tableau ci-dessous.
CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char)
AS
CURSOR quote_recs IS
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r,
rolequote rq, actor a, movie m
where
rq.quoteID = q.quoteID
AND
rq.roleID = r.roleID
AND
r.actorID = a.actorID
AND
r.movieID = m.movieID
AND
a.actorID = id_actor;
BEGIN
FOR row IN quote_recs LOOP
DBMS_OUTPUT.PUT_LINE('a.firstName' || 'a.lastName');
end loop;
END PRINT_ACTOR_QUOTES;
/
Lorsque je mets la sortie du serveur, je reçois
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
plusieurs fois!
Qu'est-ce que "il" dans la déclaration "il est juste dit que la procédure est terminée"?
Par défaut, la plupart des outils ne configurent pas de mémoire tampon sur laquelle écrire dbms_output
et ne tentent pas de lire à partir de cette mémoire tampon après l'exécution du code. La plupart des outils, en revanche, ont la capacité de le faire. En SQL * Plus, vous devez utiliser la commande set serveroutput on [size N|unlimited]
. Alors tu ferais quelque chose comme
SQL> set serveroutput on size 30000;
SQL> exec print_actor_quotes( <<some value>> );
Dans SQL Developer, accédez à View | DBMS Output
pour activer la fenêtre de sortie du SGBD, puis appuyez sur l'icône plus verte pour activer la sortie du SGBD pour une session particulière.
De plus, en supposant que vous ne souhaitiez pas imprimer le littéral "a.firstNamea.lastName" pour chaque ligne, vous souhaiterez probablement
FOR row IN quote_recs
LOOP
DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );
END LOOP;
cette déclaration
DBMS_OUTPUT.PUT_LINE ('a.firstName' || 'a.lastName');
signifie imprimer la chaîne telle quelle .. supprimer les guillemets pour obtenir les valeurs à imprimer.Ainsi, la syntaxe correcte est
DBMS_OUTPUT.PUT_LINE(a.firstName || a.lastName);
Définir la requête comme ci-dessous en première ligne
SET SERVEROUTPUT ON
J'utilise Oracle SQL Developer,
Dans cet outil, je devais activer la sortie du SGBD pour afficher les résultats imprimés avec dbms_output.put_line
Vous pouvez trouver cette option dans le volet de résultats où d'autres résultats de requête sont affichés. Donc, dans le volet des résultats, j'ai 7 onglets. 1er onglet nommé Résultats, le suivant est Sortie de script, etc. En dehors de cela, vous pouvez trouver un onglet nommé "Sortie du SGBD", sélectionnez cet onglet, puis la 1ère icône (qui ressemble à une icône de dialogue) est Activer la sortie du SGBD . Cliquez sur cette icône. Ensuite, vous exécutez le PL/SQL, puis sélectionnez "Onglet Sortie SGBD, vous devriez pouvoir voir les résultats là-bas.
Tous se concentrent sur la boucle for, mais si nous utilisons une boucle normale, nous devons utiliser la variable d’enregistrement du curseur. Ce qui suit est le code modifié
CREATE OR REPLACE PROCEDURE PRINT_ACTOR_QUOTES (id_actor char)
AS
CURSOR quote_recs IS
SELECT a.firstName,a.lastName, m.title, m.year, r.roleName ,q.quotechar from quote q, role r,
rolequote rq, actor a, movie m
where
rq.quoteID = q.quoteID
AND
rq.roleID = r.roleID
AND
r.actorID = a.actorID
AND
r.movieID = m.movieID
AND
a.actorID = id_actor;
recd quote_recs%rowtype;
BEGIN
open quote_recs;
LOOP
fetch quote_recs into recs;
exit when quote_recs%notfound;
DBMS_OUTPUT.PUT_LINE(recd.firstName||recd.lastName);
end loop;
close quote_recs;
END PRINT_ACTOR_QUOTES;
/