SQL> create  or replace trigger TCREATER
  2  before insert on why
  3  for each row
  4  declare
  6  begin
  7   :new.who := user;
  8  end;
  9  /

解决方案 »

  1.   

    SQL> create or replace trigger TCHREATER
      2  before insert on why
      3  for each row
      4  declare
      5  begin
      6  :new.who:=user;
      7  end;
      8  /警告: 创建的触发器带有编译错误。SQL> show error;
    TRIGGER TCHREATER 出现错误:LINE/COL ERROR
    -------- --------------------------------------------
    3/1      PLS-00049: 错误的赋值变量 'NEW.WHO'
    为什么老提示说错误的赋值变量‘NEW.WHO’?
      

  2.   

    new是作为输入参数,是不可更改的,应该这么写:
      create or replace trigger TCHREATER
      before insert on why
      for each row
      declare
        aa why.who%type;
      begin
        aa:=:new.who;
      end;
      /
      

  3.   

    还是一样的问题:SQL> create or replace trigger TCHREATER
      2  before insert on why
      3  for each row
      4  declare
      5    aa why.who%type;
      6  begin
      7    aa:=:new.who;
      8  end;
      9  /警告: 创建的触发器带有编译错误。SQL> show error;
    TRIGGER TCHREATER 出现错误:LINE/COL ERROR
    -------- ------------------------------------------
    4/7      PLS-00049: 错误的赋值变量 'NEW.WHO'
    SQL>
      

  4.   

    desc why
    看看有没有这个表,有没有字段who
      

  5.   

    在insert 触发器中:new值无效
      

  6.   

    before insert 该为alter insert就可以了
      

  7.   

    首先:NEW 值可以before 行級觸發器中被修改,:OLD 是永遠也不可以修改,只能讀取。
    old和new不能被傳遞給接受triggering_table%rowtype類型的參數的過程或函數。
      

  8.   

    你要用trigger来实现行记录变化后修改本表记录么?我记得这样好像是不行的,TRIGGER不能允许这样做。
      

  9.   

    before insert 该为alter insert
      

  10.   

    create or replace trigger TCHREATER
      before insert on why
      for each row
      begin
        :new.who:=user;
      end;
      

  11.   

    谢谢,楼上诸位高手的指教,
    本人幸运的地找到了问题的所在,
    哈哈。。自己太蠢了,没办法。。
    我在pd中建模型生成 表后,生成的字段都被加上了引号,
    所以一定要用小写的,而我在写触发器的时候,
    已经去掉了引号,便默认为了大写,
    造成了不匹配,所以老提示错误。
    但现在的问题是,我怎么样才能让他在pd生成表的时候,
    不要给字段加上引号?????谢谢了。。