光标选择没有MAX函数或子查询的最大日期

时间:2013-10-17 02:47:41

标签: sql oracle

我需要使用带有参数的显式游标,该参数接受汽车注册以查找最近在汽车上进行的预订。我不能用 MAX功能。我必须比较所有相关日期才能找到最新的日期。

这就是我到目前为止所做的“

Declare
  v_rec_date DATE; 
    Cursor date_cur (v_reg VARCHAR2) IS 
    SELECT * FROM i_booking
    WHERE registration = v_reg;
    v_date date_cur%ROWTYPE;
  Begin
   FOR v_date IN date_cur LOOP 
     DBMS_OUTPUT.PUT_LINE('Recent Rental Date:'|| ' '||v_rec_date); 
   END LOOP;
  End;

然而,这给了我错误:

FOR v_date IN date_cur LOOP
              *
ERROR at line 8: 
ORA-06550: line 8, column 15: 
PLS-00306: wrong number or types of arguments in call to 'DATE_CUR' 
ORA-06550: line 8, column 1: 
PL/SQL: Statement ignored 

我在哪里错了?

1 个答案:

答案 0 :(得分:1)

您已经创建了参数化游标,但是您没有传入任何参数。

此行执行时:     FOR v_date IN date_cur LOOP

您需要传递v_reg的值,因为这就是您设计光标的方式。

查看Oracle文档here以获取示例。

具体来看看标题为“示例6-20将参数传递给显式游标FOR LOOP语句”的链接中的部分,其中它们正在完成您在此处尝试的内容。

当您在此处声明游标时: Cursor date_cur(v_reg VARCHAR2)您说当您打开此游标时,您将把引用为v_reg的参数传递给游标,并且v_reg将是VARCHAR2类型。

当您尝试在此处使用光标时: FOR v_date IN date_cur LOOP 您收到的错误基本上说:“您承诺在打开游标date_cur时包含一个参数,但您没有不给我一个。“

这是你所拥有的,但现在将一个参数传递给光标。

   Declare
  v_rec_date DATE; 
    Cursor date_cur (v_reg VARCHAR2) IS 
    SELECT * FROM i_booking
    WHERE registration = v_reg;
    v_date date_cur%ROWTYPE;
  Begin
   FOR v_date IN date_cur("SOME VALUE HERE") LOOP 
     DBMS_OUTPUT.PUT_LINE('Recent Rental Date:'|| ' '||v_rec_date); 
   END LOOP;
  End;