Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring DataSourceInitializer将触发器拆分为sql;分隔符_Sql_Spring_Datasource_Delimiter_Initializer - Fatal编程技术网

Spring DataSourceInitializer将触发器拆分为sql;分隔符

Spring DataSourceInitializer将触发器拆分为sql;分隔符,sql,spring,datasource,delimiter,initializer,Sql,Spring,Datasource,Delimiter,Initializer,我们使用org.springframework.batch.test.DataSourceInitializer类,以便基于.sql脚本初始化数据库 触发器添加到.sql后,初始化失败 调试后,在此处找到了错误的原因: try { scripts = StringUtils.delimitedListToStringArray(stripComments(IOUtils.readLines(scriptResource.getInputStream())), ";"); } 发生此错误,因为分

我们使用org.springframework.batch.test.DataSourceInitializer类,以便基于.sql脚本初始化数据库

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

调试后,在此处找到了错误的原因:

try {
scripts = StringUtils.delimitedListToStringArray(stripComments(IOUtils.readLines(scriptResource.getInputStream())), ";");
}
发生此错误,因为分隔符是“”;“符号,所以触发器被根据“”;“拆分为几个部分,并且处理不正确

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


谢谢。

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; 

通过编写自己的DataSourceInitializer解决了这个问题,它处理“;”取决于触发器与否

声明ROWFOUND布尔值;是不必要的,但不应破坏触发器a没有更改或其他,但似乎应该使用“立即执行”,因为我从其他讨论中了解到,分隔符需要是“/”,而不是“;”-甲骨文可以使用;作为SQL语句的分隔符,而不是PL/SQL块。