Как передать значение даты курсору в plsql? - PullRequest
3 голосов
/ 25 апреля 2011

В основном, я хотел бы передать значение даты курсору и распечатать всю строку / запись после каждого найденного.У меня проблемы, потому что а) я не знаю, правильно ли конвертируется моя дата в разделе BEGIN, и б) я получаю «неправильное число или типы аргументов при вызове« PUT_LINE »» при печати каждой строки.

Это то, что у меня есть до сих пор:

DEFINE B_HIREDATE = 11-OCT-88

DECLARE
  cursor DATE_CUR (the_date DATE) is
    select * from employees
      where hire_date > to_date(the_date, 'dd-mon-yy')
      order by hire_date;

  r_emp DATE_CUR%ROWTYPE;

BEGIN
  for r_emp IN DATE_CUR('&B_HIREDATE') LOOP
     dbms_output.put_line(r_emp);
  end LOOP;
END;
/

Я не получаю никаких выходных значений, даже если я изменяю свой оператор выбора на известное имя отдельного поля.

1 Ответ

4 голосов
/ 25 апреля 2011

К сожалению, вы не можете распечатать всю строку за один вызов 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, или есть отдельная панель для просмотра вывода, которую необходимо включить для рабочего листа.

...