首页 > 解决方案 > DB2 中的过程 - SQL 错误 [42601]:[SQL0199] 关键字 FROM 不是预期的。有效令牌:使用 SKIP WAIT WITH WHERE

问题描述

您好我正在尝试编写一个 DB2 过程,这在 SQL Server 中是一项简单的任务,但在 DB2 中似乎非常困难

脚本:

CREATE PROCEDURE TT.PURGE_LOGS ()
  LANGUAGE SQL  
  SPECIFIC atomic_proc   
  ap:  BEGIN ATOMIC            
     DELETE FROM TT.DTL
     WHERE LOGID IN 
     (SELECT LOGID FROM TT.HDR
     WHERE LOGTYPE <> 120 AND CRDATE < CURRENT_DATE - 30 DAY FROM sysibm.sysdummy1); 
     SIGNAL SQLSTATE '70000';        
     DELETE LOGID FROM TT.HDR
     WHERE LOGTYPE <> 120 AND CRDATE < CURRENT_DATE - 30 DAY FROM sysibm.sysdummy1; 

结束 ap

错误:SQL 错误 [42601]:[SQL0199] 关键字 FROM 不是预期的。有效令牌:使用 SKIP WAIT WITH WHERE

有什么想法我哪里出错了吗?

标签: db2procedure

解决方案


正如 mustaccio 在评论中已经建议的那样,您的语法无效。

如果 CRDATE 的数据类型是 DATE 那么您的意思是:

CREATE or replace PROCEDURE TT.PURGE_LOGS ()
  LANGUAGE SQL  
  SPECIFIC atomic_proc   
  ap:  
  BEGIN ATOMIC            
     DELETE FROM TT.DTL
     WHERE LOGID IN 
                    (SELECT LOGID 
                     FROM TT.HDR
                     WHERE LOGTYPE <> 120 
                     AND CRDATE < CURRENT_DATE - 30 DAYS
                    ) ;
     DELETE FROM TT.HDR
     WHERE LOGTYPE <> 120 
     AND CRDATE < CURRENT DATE - 30 DAYS
     ;

END ap

请注意,您SIGNAL SQLSTATE可能应该在异常处理程序中,否则在您编写它时其目的不清楚。


推荐阅读