К сожалению, вы не можете распечатать всю строку за один вызов DBMS_OUTPUT
;вам нужно будет распечатать каждый столбец, возвращаемый курсором в отдельности.PUT_LINE
ожидает VARCHAR2
аргумент или что-то, что может быть неявно преобразовано.Вы можете объединить несколько значений в один вызов.Хорошее форматирование не так просто.
Преобразование даты почти в порядке, но вы должны иметь TO_DATE
в вызове курсора, так как параметр курсора ожидает DATE
;и вы должны использовать RR
вместо YY
в маске даты или, предпочтительно, использовать 4-значные годы и маску YYYY
.
SET SERVEROUTPUT ON
DEFINE B_HIREDATE = 11-OCT-1988
DECLARE
cursor DATE_CUR (the_date DATE) is
select * from employees
where hire_date > the_date
order by hire_date;
BEGIN
for r_emp IN DATE_CUR(TO_DATE('&B_HIREDATE','DD-MON-YYYY')) LOOP
dbms_output.put_line(r_emp.hire_date);
end LOOP;
END;
Вам не нужно явно объявлять r_emp
как переменная с этим синтаксисом курсора (но вы бы сделали это с OPEN
/ FETCH
/ CLOSE
версией).
Если вы используете это в SQL * Plus, вам нужно добавить SET SERVEROUTPUT ON
в начале, чтобы разрешить отображение вызовов DBMS_OUTPUT
.Вы можете сделать это и в SQL Developer, или есть отдельная панель для просмотра вывода, которую необходимо включить для рабочего листа.