Podczas wykonywania następującego kodu po prostu mówi, że procedura jest zakończona i nie drukuje informacji, które chcę, aby (firstName, lastName), a następnie innych wartości z zapytania wybierającego w tabeli poniżej.
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;
/
Po włączeniu wyjścia serwera otrzymuję
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
a.firstNamea.lastName
wiele razy!
źródło
set serveroutput on
polecenie przed wykonaniem procedury w SQL * Plus.SELECT
instrukcję w wierszu polecenia SQL Plus, instrukcja SQL została wykonana, dane zostały zwrócone, ale dane nie zostały wyświetlone w SQL Plus? Wydaje się to mało prawdopodobne, chyba że bawiłeś sięautotrace
ustawieniami, w którym to przypadku mógłbyś zobaczyć plan zapytań i statystyki wykonania, a nie wyniki zapytania. Zaczynamy jednak oddalać się od twojego pierwotnego pytania.źródło
to oświadczenie
oznacza wydrukowanie ciągu tak, jak jest. usuń cudzysłowy, aby uzyskać wartości Więc prawidłowa składnia to
źródło
Ustaw zapytanie jak poniżej w pierwszym wierszu
SET SERVEROUTPUT ON
źródło
Używam Oracle SQL Developer,
W tym narzędziu musiałem włączyć wyjście DBMS, aby wyświetlić wyniki wydrukowane przez dbms_output.put_line
Tę opcję można znaleźć w okienku wyników, w którym wyświetlane są inne wyniki zapytania. więc w panelu wyników mam 7 zakładek. Pierwsza zakładka o nazwie Wyniki, następna to Wyjście skryptu i tak dalej. Z tego możesz znaleźć zakładkę o nazwie „Wyjście DBMS” wybierz tę zakładkę, a następnie pierwsza ikona (wygląda jak ikona dialogowa) to Włącz wyjście DBMS . Kliknij tę ikonę. Następnie wykonujesz PL / SQL, a następnie wybierasz zakładkę "DBMS Output", powinieneś być w stanie zobaczyć tam wyniki.
źródło
Wszystkie koncentrują się na pętli for, ale jeśli używamy normalnej pętli, musieliśmy użyć zmiennej rekordu kursora. Poniżej znajduje się zmodyfikowany kod
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; /
źródło