variable
не поддерживает даты и временные метки. Также ваш окончательный запрос должен использовать :my_date
(с указанием переменной хоста), а не my_date
.
Если целью является заполнение таблиц с использованием переменных, заполненных на предыдущем шаге, вы можете использовать PL / SQL для всей задачи, например,
declare
myDate date;
begin
select some_col into myDate from wherever;
insert into target_table (col1, col2, col2)
select x, y, z
from source_table
where business_date = myDate;
end;
Или, что еще лучше, определите PL / SQL packages , чтобы инкапсулировать ваш лог обработки c.
Что касается кода вы разместили, начиная с Oracle 12.1, вы можете объявить курсор ref в PL / SQL и попросить клиентов, таких как SQL* Plus, просто вызвать блок и распечатать результаты:
declare
my_date timestamp;
results sys_refcursor;
begin
select systimestamp into my_date
from dual;
open results for
select my_date as my_date from dual;
dbms_sql.return_result(results);
end;
/
PL/SQL procedure successfully completed.
ResultSet #1
MY_DATE
---------------------------------------------------------------------------
20-JUN-20 10.02.29.130000000
1 row selected.
Для более ранних версий Oracle вам все равно нужно объявить курсор ref как переменную хоста в SQL* Plus:
set autoprint on
var results refcursor
declare
my_date timestamp;
begin
select systimestamp into my_date
from dual;
open :results for
select my_date as my_date from dual;
end;
/
(или set autoprint off
, а затем print results
явно.)
Я не знаю Java, поэтому я не знаю, будет ли какой-либо из вышеперечисленных подходов работать в вашей среде.