我需要使用带有参数的显式游标,该参数接受汽车注册以查找最近在汽车上进行的预订。我不能用 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
我在哪里错了?
答案 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;