sql—在db2中将微秒添加到时间戳并分配给主机变量—生成时出现绑定错误

8tntrjer  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(181)

我已经为这个问题挣扎了太久,似乎无法理解真正的问题是什么。
作为输入,我从呼叫者tms=2020-01-02-03.04.05.060708接收。然后我想实现以下目标-但是我的构建以bindlog错误结束(见底部)。

DCL TMS        CHAR(26);
DCL START      CHAR(26);
DCL END        CHAR(26);

      IF                    TMS ^= ''                    
        THEN 
           DO;         
             EXEC SQL SET :START = TMS + 1 MICROSECOND;     
             EXEC SQL SET :END   = TMS + 30 DAYS;
          END;
        ELSE
           DO;         
             EXEC SQL SET :START = '0001-01-01 00:00:00.000000';
             EXEC SQL SET :END   = CURRENT TIMESTAMP;
          END;

似乎tms没有正确地设置为相应的主机变量,即使tms实际上是一个时间戳。看文档似乎更让我困惑。有没有关于如何对日期/时间变量执行算术操作的线索?
我尝试过在日期格式中添加天数,效果很好。但是在时间戳上加上几天或几微秒会让我头疼。下面的工作就像一个魅力,只是努力理解为什么?

DCL TMS_VALID CHAR(10);
DCL TMS_EMPTY CHAR(10);

  IF                    TMS ^= ''                    
    THEN 
       DO;
         TMS_VALID           = SUBSTR(TMS,1,10);  
         EXEC SQL SET :START = DATE(:TMS_VALID);  /* Would like to add 1 microsecond to :START*/
         EXEC SQL SET :END   = DATE(:TMS_VALID) +  30 DAYS;
      END; 
    ELSE  
       DO;
         TMS_EMPTY           = SUBSTR(CURRENT_TIMESTAMP,1,10);
         EXEC SQL SET :START = DATE(:TMS_EMPTY) - 30 DAYS;
         EXEC SQL SET :END   = DATE(:TMS_EMPTY);
      END;

下面是bindlog。任何帮助都将不胜感激,谢谢!

DSNX200I  :DB2A BIND SQL ERROR       
           USING TSTSD AUTHORITY     
           PLAN=(NOT APPLICABLE)     
           DBRM=AB12345              
           STATEMENT=455             
           SQLCODE=-206              
           SQLSTATE=42703            
           TOKENS=AB12345I.TMS  
           CSECT NAME=DSNXORSO       
           RDS CODE=-225             
DSNX200I  :DB2A BIND SQL ERROR       
           USING TSTSD AUTHORITY     
           PLAN=(NOT APPLICABLE)     
           DBRM=AB12345              
           STATEMENT=456             
           SQLCODE=-206              
           SQLSTATE=42703            
           TOKENS=AB12345I.TMS  
           CSECT NAME=DSNXORSO       
           RDS CODE=-225

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题