在Oracle/PLSQL中增加日期时间时出错

在Oracle/PLSQL中增加日期时间时出错,oracle,plsql,oracle11g,oracle12c,Oracle,Plsql,Oracle11g,Oracle12c,在这里,我使用从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 hh

在这里,我使用从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数据类型为TimeStrap。请查看图像并建议我应该更改什么

请也检查一下这个
问题在于,您试图将
时间戳
转换为不需要的日期。当您需要将其转换为日期时,最好使用
CAST
。用这个替换你的插件。它应该会起作用

   INSERT INTO dimdate1 (
        dateslotstart,
        dateslotend,
        "Date",
        slotname,
        monthname,
        monthnumberofyear,
        quarter,
        year,
        semester
    ) VALUES (
        dateti,
        dateti2,
        CAST (dateti AS DATE),
        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
    );

提供用于创建表的DDL
DimDate1
我添加了DDL@KaushikNayakBy DDL,我指的是
create table DimDate1语句
。运行此查询并让我知道输出<代码>选择dbms_元数据。从DUAL获取_DDL('TABLE','DIMDATE1')[Err]ORA-31603:在架构“MY_ERP_LOCAL_DB”ORA-06512:在“SYS.DBMS_METADATA”中找不到类型表的对象“DIMDATE1”:第1546行ORA-06512:在“SYS.DBMS_METADATA”中,第1583行ORA-06512:在“SYS.DBMS_METADATA”中,第1901行ORA-06512:在“SYS.DBMS_METADATA”中,第2792行ORA-06512:在“SYS.DBMS_METADATA”中,第4333行ORA-06512:在架构“MY_ERP_LOCAL_DB”中找不到第1行。我现在可以做什么?我在“[Err]ORA-20000:ORU-10027:缓冲区溢出,限制20000字节”中遇到错误。它与插入或转换无关。您必须检查您是否正在使用PL/SQL代码运行一个无限循环
   INSERT INTO dimdate1 (
        dateslotstart,
        dateslotend,
        "Date",
        slotname,
        monthname,
        monthnumberofyear,
        quarter,
        year,
        semester
    ) VALUES (
        dateti,
        dateti2,
        CAST (dateti AS DATE),
        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
    );