高深问题,关于ODAC中运行触发器的怪现象。

liubingood 2003-09-11 03:41:55
我在一个表中写个触发器,用来产生一个自增数字,作为一个表的主关键字。
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就行。
...全文
25 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiuyang_wang 2003-09-12
  • 打赏
  • 举报
回复
你创建的触发器本身就是错误的,当触发时,t_b_patient 对于本触发器属于活动表,因此不能用SELECT COUNT(*)语句来得到记录数,这是创建触发器的大忌。
一般这种情况都采用序列的方式实现。
另外,你可以看看关于如何解决动态表问题的书籍,对你以后会大有帮助。
liubingood 2003-09-12
  • 打赏
  • 举报
回复
谢谢啦,等下撒分!!!
armu80830 2003-09-12
  • 打赏
  • 举报
回复
同意 BlueskyWide(谈趣者) ,这种情况最好用序列实现
beckhambobo 2003-09-12
  • 打赏
  • 举报
回复
是的,为何要访问本触发表,这样性能下降
用序列实现自增是oracle所特有的
ColinGan 2003-09-11
  • 打赏
  • 举报
回复
BlueskyWide(谈趣者) 的方法是可行的
BlueskyWide 2003-09-11
  • 打赏
  • 举报
回复
换一种思维方法:

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;

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧