CREATE OR REPLACE TRIGGER lds_2800 AFTER INSERT OR UPDATE OR DELETE ON A REFERENCING NEW AS N FOR EACH ROW
declare tbn varchar(20) := 'A' ;colname varchar(100);
--sqlstmt varchar(255);
 begin
 for colname in (select column_name cn from user_tab_cols where table_name='A')
 loop
 dbms_output.put(:N.colname.cn);
--execute immediate sqlstmt;
 end loop;
 dbms_output.put_line('');
 end;报错:错误的赋值变量 N.colname而且这个DBMS_output.put_line()好像不能用execute immediate sqlstmt动态执行,因为我不能预先知道这个表的字段,所以必须要动态的执行,求助。

解决方案 »

  1.   

     dbms_output.put(:N.column_name);
    试试
      

  2.   

    都试过了,不行colname.cn 就是列名。
      

  3.   


     dbms_output.put_line(colname.cn);这样要是不行,就不知道怎么写了
      

  4.   

    --直接这样看 
    dbms_output.put(colname);
      

  5.   

    CREATE OR REPLACE TRIGGER lds_2800 AFTER INSERT OR UPDATE OR DELETE ON A REFERENCING NEW AS N FOR EACH ROW
    declare 
    tbn varchar(20) := 'A' ;
    colname varchar(100);
    res varchar(100);
    --sqlstmt varchar(255);
     begin
     for colname in (select column_name cn from user_tab_cols where table_name ='A')
     loop
     res:=colname.cn;
     dbms_output.put(:N.colname.cn);
    --execute immediate sqlstmt;
     end loop;
     dbms_output.put_line('');
     end;试试这个吧
      

  6.   

    CREATE OR REPLACE TRIGGER lds_2800 AFTER INSERT OR UPDATE OR DELETE ON A REFERENCING NEW AS N FOR EACH ROW
    declare 
    tbn varchar(20) := 'A' ;
    colname varchar(100);
    res varchar(100);
    --sqlstmt varchar(255);
     begin
     for colname in (select column_name cn from user_tab_cols where table_name ='A')
     loop
     res:=colname.cn;
     dbms_output.put(res);
    --execute immediate sqlstmt;
     end loop;
     dbms_output.put_line('');
     end;发错了