0

.sql スクリプトに基づいて DB を初期化するために、org.springframework.batch.test.DataSourceInitializerクラスを使用します。

トリガーが .sql に追加された後、初期化に失敗しました。

デバッグ後、エラーの原因 while が見つかりました:

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

区切り文字が「;」であるため、このエラーが発生しました。記号なので、トリガーは「;」に基づいていくつかの部分に分割されました と不当に扱われます。

トリガーを正しく理解する、より高度なデータ ソース初期化子を教えてもらえますか?

ありがとうございました。

4

2 に答える 2

1

CREATETRIGGER文は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 に答える