Spring DataSourceInitializer разбивает триггеры по sql; ограничитель - PullRequest
0 голосов
/ 22 сентября 2010

Мы используем org.springframework.batch.test.DataSourceInitializer класс для инициализации БД на основе сценариев .sql.

Инициирование не удалось после добавления триггера в .sql.

После отладки здесь была найдена причина ошибки:

try {
scripts = StringUtils.delimitedListToStringArray(stripComments(IOUtils.readLines(scriptResource.getInputStream())), ";");
}

Эта ошибка произошла, потому что разделитель - это ";" символ, поэтому триггер был разбит на несколько частей на основе ";" и обработан неправильно.

Можете ли вы посоветовать мне более продвинутый инициализатор источника данных, который будет правильно понимать триггеры?

Спасибо.

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

Оператор CREATE TRIGGER является блоком PL / SQL, а блоки PL / SQL должны заканчиваться одним / в качестве первого символа строки.
Это должно работать:

CREATE OR REPLACE TRIGGER "ACCOUNT_BIU" 
  BEFORE INSERT OR UPDATE ON ACCOUNT 
  REFERENCING OLD AS OLD NEW AS NEW 
  FOR EACH ROW 
BEGIN 
  IF (:NEW.ESKONTOTYPE_ID   IS NULL) THEN 
    IF (:NEW.KONTOTYPE_ID    ='NP') THEN 
      :NEW.ESKONTOTYPE_ID   := 311; 
    ELSIF (:NEW.KONTOTYPE_ID ='MT') THEN 
      :NEW.ESKONTOTYPE_ID   := 320; 
    ELSIF (:NEW.KONTOTYPE_ID ='NL') THEN 
      :NEW.ESKONTOTYPE_ID   := 330; 
    END IF; 
  END IF; 
  :NEW.ENDRETBRUKER := SUBSTR(USER,1,7); 
  :NEW.ENDRETDATO   := SYSDATE; 
END; 
/

ALTER TRIGGER "ACCOUNT_BIU" ENABLE; 
0 голосов
/ 02 марта 2011

было решено написанием собственного DataSourceInitilaizer, который обрабатывает ';'в зависимости от триггера или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...