0

我们使用org.springframework.batch.test.DataSourceInitializer类来基于 .sql 脚本初始化 DB。

将触发器添加到 .sql 后,初始化失败。

调试后发现while报错的原因在这里:

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

发生此错误,因为分隔符是“;” 符号,所以触发器在“;”的基础上被分成了几个部分 并且处理不当。

你能告诉我更高级的数据源初始化器,它会正确理解触发器吗?

谢谢你。

4

2 回答 2

1

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; 
于 2010-09-22T14:47:38.990 回答
0

通过编写自己的 DataSourceInitilaizer 来解决,它处理 ';' 取决于触发与否

于 2011-03-02T17:15:13.000 回答