我正在做一项需要我使用2个显式游标的练习。一个光标是获取第二个参数。最终目标是根据注册情况找到每辆车的最新“租赁日期”。例如,注册345JKL是在2010年6月6日,07/09/2011和08/09/2013租用的。我希望这只返回最近的日期,即08/09/2013,我希望它为表格中的每次注册提供最新日期。
我知道有更好的方法可以做到这一点,例如MAX,子查询等(我不允许使用它们),但作为一种“横向思维练习”,我需要在没有内置函数的情况下执行此操作,子查询和其他让生活变得轻松的事情。
我对此感到有些困惑。
到目前为止,这是我无处可去的地方:
declare
v_maxdate DATE;
v_reg VARCHAR2(20);
cursor reg_cur IS
SELECT * FROM i_car;
v_car reg_cur%ROWTYPE;
cursor c_reg (reg i_booking.registration%TYPE) IS
SELECT date_reserved from i_booking
WHERE registration = reg;
v_date c_reg%ROWTYPE;
begin
FOR v_date IN c_reg (v_car.registration) LOOP
v_maxdate := '01/JAN/90';
If v_date > v_maxdate THEN
v_maxdate := v_date;
end if;
end loop;
end;
它给我这个错误:
If v_date > v_maxdate THEN
*
ERROR at line 17:
ORA-06550: line 17, column 11:
PLS-00306: wrong number or types of arguments in call to '>'
ORA-06550: line 17, column 1:
PL/SQL: Statement ignored
我想而不是继续把我的头撞在桌子上,我会请求指导。
感谢您的帮助。
答案 0 :(得分:0)
v_date
变量是一条记录,因此您必须使用该点实际访问其中的某些字段 - date_reserved
在您的情况下:
begin
v_maxdate := '01/JAN/90';
FOR v_date IN c_reg (v_car.registration) LOOP
If v_date.date_reserved > v_maxdate THEN
v_maxdate := v_date;
end if;
end loop;
end;
我还将v_maxdate
的初始化移到了循环之外。