在oracle执行insert的时候或前或后
你说的有问题啊“在插入数据col2,col3,没有生成col1主键后,“
你如果插入了数据,就生成主健,不然你也插不进去啊

解决方案 »

  1.   

    在oracle中还是使用序列吧,sequence.nextval
      

  2.   

    那就有可能是触发器建的有问题
    create or replace trigger trg_name
    before insert on A
    for each row
    begin
    select seq_name.nextval into :new.col1 from dual;
    end;
    /
      

  3.   

    自动增量解决方法:
    1.创建sequence就可以
    create sequence seq_name
    minvalue 1
    maxvalue 999999999999999999
    start with 1
    increment by 1
    cache 20;
    可以直接在插入时调用seq_name.nextval;
    如insert into table_name(proid) values(seq_name.nextval);2.也可以创建触发器(同时要创建sequence):
    create or replace trigger trg_name
    before insert on table_name
    for each row
    begin
    select seq_name.nextval into :new.proid from dual;
    end;
    /
      

  4.   

    不是这个问题吧,我用自己的函数实现生成主键功能和用sequence有什么区别啊,再说了我在数据库用命令insert调试过,不用输入主键的值,直接插入他会调用函数的啊,说明触发器正常。当在delphi中的应用程序中实现数据库操作的时候,插入数据就一定要包含主键,不然出现提示主键不能为空。当我添加主键进行插入(主键任意,不是我要求的格式,只要不为空),就不会提示错误,触发器正常运行,生成要求格式的主键。但是就出现一个问题:数据库中的数据和当前客户端的数据不一致(数据库主键是要求格式,客户端则是自己任意输入的主键)。还有一个附加的问题就是在客户端还是要求输入主键,没有达到我预期的主键客户端自动生成的目的。
      

  5.   

    输入还是要的,你可以在程序里面insert into A (col1,col2,col3) values ('aaaa','')
    给col1列一个值,只要类型相兼容就行,到时候触发器生成的主键会覆盖aaaa,目的达到:
    如果要实现主键客户端自动生成的目的:你就在DEL\
    phi里面做个函数生成就OK了,把触发器的生成逻辑在DELPHI里面重写一遍,不用触发器,INSERT 的时候col1列使用函数生成的值插入就行了,这还不简单吗
      

  6.   

    还是把你的trigger code and delphi code帐出来让大家帮你分析一下啦.