Процедура в DB2 - ошибка SQL [42601]: [SQL0199] Ключевое слово FROM не ожидается.Действительные токены: ИСПОЛЬЗУЙТЕ ПРОПУСТИТЕ, ГДЕ ГДЕ - PullRequest
0 голосов
/ 25 апреля 2018

Привет, я пытаюсь написать процедуру 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; 

END ap

Ошибка: Ошибка SQL [42601]: [SQL0199] Ключевое слово FROM не ожидается. Действительные токены: ИСПОЛЬЗУЙТЕ ПРОПУСТИТЕ, ГДЕ ГДЕ

Есть идеи, где я иду не так?

1 Ответ

0 голосов
/ 25 апреля 2018

Как уже предлагал Мустаччо в комментарии, ваш синтаксис недействителен.

Если тип данных 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вероятно, должен быть обработчиком исключений, иначе его назначение неясно, как вы его написали.

...