Подтвердить что ты не робот

DBMS_OUTPUT.PUT_LINE не печатать

При выполнении следующего кода он просто говорит, что процедура завершена и не печатает информацию, которую я хочу (firstName, lastName), а затем другие значения из запроса выбора в таблице ниже.

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

Когда вы устанавливаете выход сервера, я получаю

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

несколько раз!

4b9b3361

Ответ 1

Что такое "это" в заявлении "он просто говорит, что процедура завершена"?

По умолчанию большинство инструментов не настраивают буфер для dbms_output для записи и не пытаются прочитать из этого буфера после выполнения кода. С другой стороны, у большинства инструментов есть возможность сделать это. В SQL * Plus вам нужно будет использовать команду set serveroutput on [size N|unlimited]. Итак, вы бы сделали что-то вроде

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

В SQL Developer вы перейдете к View | DBMS Output, чтобы включить окно вывода СУБД, затем нажмите зеленую иконку плюс, чтобы включить вывод СУБД для определенного сеанса.

Кроме того, предполагая, что вы не хотите печатать буквальный "a.firstNamea.lastName" для каждой строки, вы, вероятно, захотите

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

Ответ 2

это утверждение

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

означает печатать строку как есть. удалить кавычки, чтобы получить значения для печати. ​​Таким образом, правильный синтаксис

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

Ответ 3

  • Убедитесь, что вы открыли окно вывода Dbms через функцию просмотра в строке меню.
  • Нажмите на зеленый знак "+" и добавьте имя своей базы данных.
  • Write 'DBMS_OUTPUT.ENABLE;' в вашей процедуре в качестве первой строки. Надеюсь, это решает вашу проблему.

Ответ 4

Задайте запрос как показано на первой строке

SET SERVEROUTPUT ON 

Ответ 5

Все они концентрируются на цикле for, но если мы используем обычный цикл, нам пришлось использовать переменную записи курсора. Ниже приведен модифицированный код

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

Ответ 6

Я использую Oracle SQL Developer,

В этом инструменте мне пришлось включить вывод СУБД для просмотра результатов, напечатанных dbms_output.put_line

Вы можете найти эту опцию в области результатов, где отображаются другие результаты запроса. Итак, в панели результатов у меня есть 7 вкладок. Первая вкладка называется "Результаты", следующая - "Вывод скрипта" и т.д. Из этого вы можете найти вкладку с именем "Вывод СУБД", выберите эту вкладку, затем 1-й значок (выглядит как значок диалога) - " Включить вывод СУБД". Нажмите на эту иконку. Затем вы выполняете PL/SQL, затем выбираете вкладку "Вывод СУБД", вы должны увидеть результаты там.