При этом используются неявные курсоры, а не разделение явного курсора с помощью предложения OR или использование динамического SQL:
CASE TipoConsulta
WHEN 'mes' THEN
FOR b IN (SELECT a.*
FROM TRAFICO a
WHERE TO_CHAR(a.fecha_busqueda, 'MM-YYYY') = To_CHAR(ADD_MONTHS(SYSDATE, -1), 'MM-YYYY')
ORDER BY a.id_trafico)
UTL_FILE.PUT_LINE(Arch, b.id_trafico);
END LOOP;
ELSE
FOR d IN (SELECT c.*
FROM TRAFICO c
WHERE c.fecha_busqueda >= SYSDATE - 7
ORDER BY c.id_trafico)
UTL_FILE.PUT_LINE(Arch, d.id_trafico);
END LOOP;
END CASE;
При этом также используется выражение PLSQL CASE, а не выражение ANSI CASE - вы можетескажем с помощью END CASE
, когда ANSI CASE просто использует END
.
Не похоже, что вы отправили весь запрос - я не знаю, откуда приходит arch
, инеобходимость в инкрементной переменной i
... или почему вы получили SELECT * FROM TRAFICO
, но только с использованием столбца id_trafico
...