Gia*_*ino 1 sql oracle declaration cursor
我使用游标来查看一些数据,但我需要根据参数声明不同的sql语句。问题似乎是我无法在该声明中使用 if statmets:
DECLARE
CURSOR c IS SELECT * FROM TRAFICO
IF TipoConsulta = 'mes' then
BEGIN
WHERE TO_CHAR(FECHA_BUSQUEDA, 'MM-YYYY') =To_CHAR(ADD_MONTHS(SYSDATE, -1), 'MM-YYYY')
ELSE
WHERE FECHA_BUSQUEDA >= SYSDATE -7
END IF;
ORDER BY ID_TRAFICO;
begin
FOR r IN C LOOP
BEGIN
Utl_File.Put_Line(Arch, r.ID_TRAFICO );
i:=i+1;
END;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
我只需要使用 if 更改 sql 语句即可。
我该怎么做呢??
TNKS
尝试使用动态游标 REF CURSOR (我假设 TripoConsulta 是一个变量,而不是查询的谓词之一):
declare
type some_cursor is ref cursor;
my_cursor some_cursor;
my_rec trafico%rowtype;
begin
if TripoConsulta = 'mes' then
open my_cursor for select * from trafico where ...;
else
open my_cursor for select * from trafico where ...;
end if;
loop
fetch my_cur into my_rec;
exit when my_cur%notfound;
Utl_File.Put_Line(my_rec.Arch, my_cur.ID_TRAFICO );
end loop;
close my_cursor;
end;
Run Code Online (Sandbox Code Playgroud)
显然,我不知道变量的含义,所以我不得不做出一些假设,但我认为这就是你的意思。我也不保证语法,因为我还没有实际测试过它。