DB2中的过程-SQL错误[42601]:[SQL0199]关键字不应来自。有效令牌:使用带WHERE的SKIP WAIT

DB2中的过程-SQL错误[42601]:[SQL0199]关键字不应来自。有效令牌:使用带WHERE的SKIP WAIT,db2,procedure,Db2,Procedure,您好,我正在尝试编写一个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 WHE

您好,我正在尝试编写一个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]关键字不应来自。有效令牌:使用带WHERE的SKIP WAIT


你知道我哪里出错了吗?

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

从TT.HDR中选择LOGID,其中LOGTYPE 120和CRDATE