我的数据库里面有一个表的id字段用的是小写标定的也就是“id”,现在利用序列和触发器在向表内插入新记录时添加id项数值。
我的触发器是:
CREATE OR REPLACE TRIGGER INSERT_CONNECTION
BEFORE INSERT ON "Connection"
BEGIN
SELECT ID_SQE.NEXTVAL INTO :NEW.ID FROM dual
END
/
可是我试过很多次了,每次都提示赋值:NEW.ID不正确。即便我把:NEW.ID改为:NEW.id也不行。
但当我把表Connection中id改为ID时,就没有问题了。请问,可否不修改数据库id的大小写,实现我的功能。还望高手赐教!

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER INSERT_CONNECTION
    BEFORE INSERT ON "Connection"
    BEGIN
    SELECT ID_SQE.NEXTVAL INTO :NEW.ID FROM dual;
    --会不会是少了个分号啊
    END;
    --oracle字段都是存储的都是大写的 即使你创建表的时候是小写
      

  2.   

    没有虾米好奇怪的,oracle中表都是大写的,即使你创建的时候用的是小写,但是生成以后一样会变成大写的,所以我建议你还是改成大写的吧!
      

  3.   

    可是我改了数据库表里面的id字段大小写以后 它就没问题啦。也没改触发器呀
    还有,我是用的Oracledeveloper做的
      

  4.   

    会不会是我用的Oracledeveloper的缘故
      

  5.   

    SQL> create table t_test_tri
      2  ("id" number);
     
    Table created
     
    SQL> 
    SQL> create or replace trigger tri_t_test_tri
      2    before insert on t_test_tri
      3    for each row
      4  declare
      5  begin
      6    if :new."id" = 1 then
      7      :new."id" := 2;
      8    end if;
      9  end;
     10  /
     
    Trigger created
     
    SQL> insert into t_test_tri values(1);
     
    1 row inserted
     
    SQL> select * from t_test_tri;
     
            id
    ----------
             2
     
    SQL>
      

  6.   


      1* create table test(id number,name varchar2(10)) --id是用小写的
    scott@YPCOST> /表已创建。scott@YPCOST> create sequence ID_SQE start with 1 increment by 1 ;序列已创建。scott@YPCOST> select id_sqe.nextval from dual;   NEXTVAL
    ----------
             1已写入 file afiedt.buf  1  CREATE OR REPLACE TRIGGER INSERT_CONNECTION
      2  BEFORE INSERT ON test
      3  for each row --这上这行
      4  BEGIN
      5  SELECT ID_SQE.NEXTVAL INTO :NEW.ID FROM dual;--:NEW.ID用大写的可以
      6* END;
    scott@YPCOST> /触发器已创建scott@YPCOST> insert into test(name) values('dfds');已创建 1 行。scott@YPCOST> commit;提交完成。scott@YPCOST> select * from test;        ID NAME
    ---------- ----------
             2 dfdsscott@YPCOST> ed
    已写入 file afiedt.buf  1  CREATE OR REPLACE TRIGGER INSERT_CONNECTION
      2  BEFORE INSERT ON test
      3  for each row
      4  BEGIN
      5  SELECT ID_SQE.NEXTVAL INTO :NEW.id FROM dual;  --用小写的也可以
      6* END;
    scott@YPCOST> /触发器已创建scott@YPCOST> insert into test(name) values('dfds');已创建 1 行。scott@YPCOST> select * from test;        ID NAME
    ---------- ----------
             2 dfds
             3 dfds
      

  7.   

    估计是用powerdesigner弄的脚本.
      

  8.   


    已写入 file afiedt.buf  1* create table test("id" number,name varchar2(10))
    scott@YPCOST> /表已创建。scott@YPCOST> create sequence ID_SQE start with 1 increment by 1 ;序列已创建。scott@YPCOST> ed
    已写入 file afiedt.buf  1  CREATE OR REPLACE TRIGGER INSERT_CONNECTION
      2  BEFORE INSERT ON test
      3  for each row --这上这行
      4  BEGIN
      5  SELECT ID_SQE.NEXTVAL INTO :NEW."id" FROM dual;--也用双引号
      6* END;
    scott@YPCOST> /触发器已创建scott@YPCOST> insert into test(name) values('df');已创建 1 行。scott@YPCOST> commit;提交完成。scott@YPCOST> select * from test;        id NAME
    ---------- ----------
             1 df