1

テーブルへのすべての挿入をトリガーしたい。場合によっては、name_event が使用可能なターゲット テーブルのリポジトリであり、これを挿入できます。利用できない場合があり、フォルダー テーブルのコードを確認する必要があります。

create or replace TRIGGER scheme2.Logger
  BEFORE INSERT OR UPDATE ON scheme2.payments
  FOR EACH ROW
BEGIN
    INSERT INTO scheme1.db(ID, NAME_EVENT, TIME_EVENT)
    VALUES(  :NEW.id 
          ,  IF (select repo.code 
                   from scheme2.repository repo
                  where repo.id = :NEW.repository_id) IS NOT NULL
             THEN 
                (select repo.code
                   from scheme2.pay_repository repo
                  where repo.id = :NEW.repository_id)
             ELSE
                (select env.repository_code 
                   from scheme2.folder env
                  where env.id = :NEW.folder_id)
          , SYSDATE);
END;

このコードを試してみましたが、コンパイル エラーが発生しました。

Error(2,1): PL/SQL: SQL Statement ignored

行 2 は各行の行です

Error(4,5): PL/SQL: ORA-00936: Unknown expression.

行 4 は行への挿入です

エラーを修正するには?

4

1 に答える 1

3
create or replace TRIGGER scheme2.Logger BEFORE INSERT OR UPDATE ON scheme2.payments
    FOR EACH ROW
   declare
   VAR_NEVENT  number(3);

    BEGIN

   select repo.code into VAR_NEVENT from scheme2.repository repo
   where repo.id = :NEW.repository_id)

     IF VAR_NEVENT  IS NOT NULL THEN 
    select repo.code INTO VAR_NEVENT from scheme2.pay_repository repo where repo.id =  :NEW.repository_id

 ELSE (select env.repository_code into VAR_NEVENT  from scheme2.folder env where env.id = :NEW.folder_id)
    END IF;

    INSERT INTO scheme1.db(ID, NAME_EVENT, TIME_EVENT)
    VALUES(:NEW.id, VAR_NEVENT  , SYSDATE);
    END;

上記に似たもの..最初に変数で結果を選択してから、それをテーブルに挿入します。

于 2015-05-06T07:36:31.263 に答える