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

Procedure in DB2 - SQL Error [42601]: [SQL0199] Keyword FROM not expected. Valid tokens: USE SKIP WAIT WITH WHERE

您好,我正在尝试编写 DB2 过程,这在 SQL 服务器中本来是一项简单的任务,但在 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

我哪里出错了?

正如 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 可能应该在异常处理程序中,否则在您编写时它的用途不清楚。