将新行添加到包含串行列的表时,在提交行时会为该列分配下一个最高整数值。我可以定义一个串行数据类型,在使用先前分配的序列值更新行时会自动增加吗?在datablade?我目前正在为整数列let intcol = select max(intcol) + 1 from table
使用以下功能。在我的应用程序中,当客户产生兴趣pymt时,先前的票号将使用下一个可用的票号进行更新。
答案 0 :(得分:2)
我认为您需要一个“AFTER UPDATE”触发器,可能还需要一个sequence来避免从表中计算max的开销。
我对Informix一无所知,让我说我理解你的“let intcol ...”语句;)但是例如要用Oracle工具重新创建MySQL's auto increment功能,你需要类似的代码:
create sequence mytable_seq start with 1 increment 1;
create or replace trigger mytable_insert before insert
for each row
begin
select mytable_seq.nextval into :new.intcol from dual;
end;
答案 1 :(得分:2)
从我收集到的其他一些问题中,您使用的是一个非常古老的Informix版本。
相对较新的版本(10+,可能稍早)支持SEQUENCE
,这将完全符合您的要求:
CREATE SEQUENCE mytable_version
INCREMENT BY 1 START WITH 1;
然后在您的更新声明中:
UPDATE mytable
SET (payment, version) = (:pymt_amt, mytable_version.next_val)
WHERE ...
每次更新都会导致版本列使用新的序列号进行更新。
如果您的应用程序有太多不同的UPDATE语句或访问方法,您无法控制,您可以考虑将UPDATE版本作为UPDATE触发器的一部分进行。
答案 2 :(得分:0)
对于Oracle,没有。
通常使用预插入触发器和序列完成。