Как насчет подхода 3:
Insert into table(dateValue)
values(sysdate);
или если вы действительно сделали выбор, чтобы получить данные:
Insert into table(dateValue)
select dateValue from other_table where ...;
Относительно того, является ли явный курсор или SELECT INTO предпочтительным, когда требуется один или другой, я бы выбрал SELECT INTO, потому что он точнее и безопаснее, если вы ожидаете, что запрос вернет ровно одну строку:
select some_value
into l_var
from other_table
where ...;
if l_var = 'A' then
do_something;
end if;
Теперь вы получите исключение (NO_DATA_FOUND или TOO_MANY_ROWS), если количество возвращаемых строк не соответствует ожидаемому. С помощью курсора вы просто получите l_var без изменений или установите значение из первой подходящей строки - это, вероятно, означает, что у вас есть ошибка, но вы ее не знаете.