it-swarm.com.de

DBMS_OUTPUT.PUT_LINE wird nicht gedruckt

Wenn der folgende Code ausgeführt wird, heißt es lediglich, dass die Prozedur abgeschlossen ist und die Informationen, die ich möchte, nicht ausgeben (firstName, lastName) und die anderen Werte der Auswahlabfrage in einer Tabelle unten.

 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;
/ 

Beim Einstellen der Serverausgabe bekomme ich 

a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName

mehrmals!

67
dexter

Was ist "es" in der Aussage "es sagt nur, dass die Prozedur abgeschlossen ist"?

Standardmäßig konfigurieren die meisten Tools keinen Puffer, in den dbms_output geschrieben werden soll, und versuchen nicht, aus diesem Puffer zu lesen, nachdem der Code ausgeführt wurde. Die meisten Tools dagegen haben die Fähigkeit, dies zu tun. In SQL * Plus müssen Sie den Befehl set serveroutput on [size N|unlimited] verwenden. Du würdest so etwas tun

SQL> set serveroutput on size 30000;
SQL> exec print_actor_quotes( <<some value>> );

In SQL Developer gehen Sie zu View | DBMS Output, um das Fenster DBMS-Ausgabe zu aktivieren. Drücken Sie dann das grüne Plus-Symbol, um die DBMS-Ausgabe für eine bestimmte Sitzung zu aktivieren. 

Vorausgesetzt, Sie möchten nicht das Literal "a.firstNamea.lastName" für jede Zeile drucken, möchten Sie wahrscheinlich

FOR row IN quote_recs
LOOP
  DBMS_OUTPUT.PUT_LINE( row.firstName || ' ' || row.lastName );
END LOOP;
143
Justin Cave

diese Aussage 

DBMS_OUTPUT.PUT_LINE ('a.firstName' || 'a.lastName');

bedeutet, den String so zu drucken, wie er ist .. Entferne die Anführungszeichen , um die zu druckenden Werte zu erhalten 

DBMS_OUTPUT.PUT_LINE(a.firstName || a.lastName);
14
Jeevi
  1. Stellen Sie sicher, dass Ihr Dbms-Ausgabefenster über die Ansichtsoption in der Menüleiste geöffnet ist.
  2. Klicken Sie auf das grüne "+" - Zeichen und fügen Sie Ihren Datenbanknamen hinzu.
  3. Schreiben Sie 'DBMS_OUTPUT.ENABLE;' innerhalb Ihrer Prozedur als erste Zeile . Hoffe, das löst Ihr Problem.
13
Atul Patel

Stellen Sie in der ersten Zeile Abfrage wie folgt ein 

SET SERVEROUTPUT ON 
3
Sreenath S

Ich verwende Oracle SQL Developer, 

In diesem Tool musste ich DBMS-Ausgabe aktivieren , um die von dbms_output.put_line gedruckten Ergebnisse anzuzeigen 

Sie finden diese Option im Ergebnisbereich, wo andere Abfrageergebnisse angezeigt werden. Ich habe also im Ergebnisbereich 7 Registerkarten. Die erste Registerkarte heißt Ergebnisse, die nächste ist Skriptausgabe und so weiter. Hier finden Sie eine Registerkarte namens "DBMS-Ausgabe". Wählen Sie diese Registerkarte aus. Das 1. Symbol (sieht wie ein Dialogsymbol aus) ist DBMS-Ausgabe aktivieren . Klicken Sie auf dieses Symbol. Dann führen Sie das PL/SQL aus und wählen dann die Registerkarte "DBMS-Ausgabe". Dort sollten Sie die Ergebnisse sehen können.

1
John Prawyn

Alle konzentrieren sich auf die for-Schleife, aber wenn wir eine normale Schleife verwenden, mussten wir die Cursor-Record-Variable verwenden. Das Folgende ist der modifizierte Code

 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;
    / 
0
Smart003