如何将日期值传递给plsql中的游标?

| 基本上,我想将日期值传递给游标,然后为找到的每个列打印出整个行/记录。我遇到了麻烦,因为a)我不知道我的日期在BEGIN部分中是否正确转换,并且b)在以下情况下,我对\'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;
/
即使将select语句更改为已知的单个字段名称,我也没有输出值。     
已邀请:
不幸的是,您无法从单个“ 1”呼叫中打印出整个行;您需要分别打印光标返回的每一列。
PUT_LINE
需要
VARCHAR2
参数或可以隐式转换的东西。您可以将多个值连接到一个调用中。好的格式并不容易。 日期转换几乎可以,但是在游标调用中应该有
TO_DATE
,因为cursor参数期望是
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中运行此程序,则需要在开始处添加ѭ14才能显示
DBMS_OUTPUT
调用。您也可以在SQL Developer中执行此操作,或者有一个单独的窗格用于查看输出,您需要为工作表启用该窗格。     

要回复问题请先登录注册