在游标声明中使用 if 语句

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

erb*_*ock 5

尝试使用动态游标 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)

显然,我不知道变量的含义,所以我不得不做出一些假设,但我认为这就是你的意思。我也不保证语法,因为我还没有实际测试过它。