Здесь я использую цикл от StartDateTime до EndDatetime и добавляю 1 час на каждой итерации. Все работает в цикле. Но проблема в запросе на вставку. Пожалуйста, проверьте запрос на вставку.
declare
StartDateTime TIMESTAMP :=to_date( '2017-01-01 00:00:00','yyyy-mm-dd
hh24:mi:ss');
EndDateTime TIMESTAMP :=to_date( '2017-12-31 00:00:00','yyyy-mm-dd
hh24:mi:ss');
dateti TIMESTAMP;
dateti2 TIMESTAMP;
StartDateTime1 TIMESTAMP;
sub INTEGER;
semester Number;
begin
sub:=( CAST( EndDateTime AS DATE ) - CAST( StartDateTime AS DATE ) ) ;
FOR i IN 0 .. 1
LOOP
StartDateTime1:=StartDateTime+i;
for idx in 0..2 loop
dateti:=to_date(StartDateTime1+(idx/24.0),'yyyy-mm-dd hh24:mi:ss');
dateti2:=to_date(StartDateTime1+((idx+1)/24.0)+ interval '-1' second,'yyyy-
mm-dd hh24:mi:ss');
case
when to_number(to_char(dateti ,'Q'))>6 then semester:=to_number(2);
else semester:=to_number(1);
end case;
Проблема начинается отсюда в запросе на вставку. В нем говорится, что найден нечисловой символ. Тип данных DateSlotStart и DateSlotEnd - это Timestamp. Пожалуйста, посмотрите изображение и посоветуйте, что мне следует изменить?
insert into DimDate1(DateSlotStart,DateSlotEnd,
"Date",SlotName,MonthName,MonthNumberOfYear,Quarter,Year,Semester) values
(to_date(dateti ,'yyyy-mm-dd hh24:mi:ss') ,to_date(dateti2 ,'yyyy-mm-dd
hh24:mi:ss') ,
to_date(dateti ,'yyyy-mm-dd'),to_char(dateti ,'hh24:mi' )||' To
'||to_char(dateti2 ,'hh24:mi' ),to_char(dateti
,'Month'),to_number(to_char(dateti ,'mm')),to_number(to_char(dateti ,'Q')),
to_number(to_char(dateti ,'YYYY')) , semester);
end loop;
END LOOP;
end;
/