2

我正在尝试在 addcomments 表上创建一个触发器,该表包含一个长列

CREATE OR REPLACE TRIGGER careventCommentssysc
AFTER INSERT 
ON addcomments
FOR EACH ROW
DECLARE
BEGIN
        cargetcomments(:NEW.addcode, :NEW.addcomment,  'INSERTING');
END careventCommentssysc;

当我尝试编译时,我收到以下错误。

ORA-04093, references to column of type LONG are not allowed in triggers.

但我不能将表格列类型更改为长。

如果有人早些时候处理过这个问题,请帮助我。

4

1 回答 1

1

编辑:我认为这可以通过简单的复合触发器来完成,因为你正在使用ORACLE 11g,因此这对你有用。不需要任何环回 dblinks。干杯

CREATE OR REPLACE TRIGGER careventCommentssysc FOR
   INSERT
   ON t
   COMPOUND TRIGGER
   l_new_long        LONG;

   TYPE addcomment_nt
   IS
      TABLE OF addcomments%ROWTYPE
         INDEX BY SIMPLE_INTEGER;

   v_addcomment_nt   user_id_nt;
   idx               SIMPLE_INTEGER := 0;
   -- AFTER EACH ROW Section:

   AFTER EACH ROW
   IS
   BEGIN
      idx := idx + 1;
      v_addcomment_nt (idx).addcode := :NEW.addcode;
   END
   AFTER EACH ROW;

   -- AFTER STATEMENT Section:

   AFTER STATEMENT
   IS
   BEGIN
      FOR i IN v_addcomment_nt.FIRST .. v_addcomment_nt.LAST
      LOOP
         EXECUTE IMMEDIATE 'select addcomment 
                            from addcomments 
                            where addcode = :1'
            INTO   l_new_long
            USING v_addcomment_nt (i).addcode;


         cargetcomments (v_addcomment_nt (i).addcode,
                         :l_new_long,
                         'INSERTING');
      END LOOP;
   END
   AFTER STATEMENT;

END careventCommentssysc;
于 2012-11-23T14:19:48.650 回答