我在一个表中写个触发器,用来产生一个自增数字,作为一个表的主关键字。
create or replace trigger tr_Patient_BeforeIns before insert on t_b_patient for each row 
declare
   v_Maxno number(12,0);
begin
   select count(*) into v_Maxno from t_b_patientinfo;
   :new.patient_no := to_char(v_Maxno+1);
end tr_Patient_BeforeIns;用ORAQUERY在C++BUILDER6。0中POST时提示说主关键字字段不准为空。
是不是没有执行触发器????用ADO就行。

解决方案 »

  1.   

    换一种思维方法:1.创建序列:
    create sequence your_seq
    nocycle
    maxvalue 9999999999
    start with 1;2.使用触发器实现自增:
    create or replace trigger your_seq_tri
    before insert on your_table1 for each row
    declare
      next_id number;
    begin
      select your_seq.nextval into next_id from dual;
      :new.id := next_id;
    end;
      

  2.   

    BlueskyWide(谈趣者) 的方法是可行的 
      

  3.   

    同意 BlueskyWide(谈趣者) ,这种情况最好用序列实现
      

  4.   

    你创建的触发器本身就是错误的,当触发时,t_b_patient 对于本触发器属于活动表,因此不能用SELECT COUNT(*)语句来得到记录数,这是创建触发器的大忌。
    一般这种情况都采用序列的方式实现。
    另外,你可以看看关于如何解决动态表问题的书籍,对你以后会大有帮助。
      

  5.   

    是的,为何要访问本触发表,这样性能下降
    用序列实现自增是oracle所特有的