Sql 是否可以定义在更新行时自动递增的串行数据类型?
将新行添加到包含串行列的表中时,提交该行时,将为该列指定下一个最高整数值。我是否可以定义一个串行数据类型,当使用以前分配的串行值更新行时,该数据类型将自动递增?在datablade中?我目前正在对整型列使用以下功能Sql 是否可以定义在更新行时自动递增的串行数据类型?,sql,auto-increment,informix,Sql,Auto Increment,Informix,将新行添加到包含串行列的表中时,提交该行时,将为该列指定下一个最高整数值。我是否可以定义一个串行数据类型,当使用以前分配的串行值更新行时,该数据类型将自动递增?在datablade中?我目前正在对整型列使用以下功能let intcol=select max(intcol)+1 from table。在我的应用程序中,当客户对pymt感兴趣时,前一个票号会被更新为下一个可用票号 对于甲骨文,没有 通常使用预插入触发器和序列完成。对于Oracle,否 通常使用预插入触发器和序列完成。我认为您需要一个
let intcol=select max(intcol)+1 from table
。在我的应用程序中,当客户对pymt感兴趣时,前一个票号会被更新为下一个可用票号 对于甲骨文,没有
通常使用预插入触发器和序列完成。对于Oracle,否
通常使用预插入触发器和序列完成。我认为您需要一个“”触发器,可能还需要一个,以避免从表中计算max的开销
我对Informix一无所知,假设我理解您的“let intcol…”声明;)但例如,要使用Oracle工具重新创建功能,您需要类似以下代码:
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;
我认为您需要一个“”触发器,可能还需要一个,以避免从表中计算max的开销
我对Informix一无所知,假设我理解您的“let intcol…”声明;)但例如,要使用Oracle工具重新创建功能,您需要类似以下代码:
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;
从您的其他一些问题中,我推断您正在使用一个非常古老的Informix版本 相对较新的版本(10+,可能稍早)支持
序列
,这将完全满足您的需求:
CREATE SEQUENCE mytable_version
INCREMENT BY 1 START WITH 1;
然后在更新声明中:
UPDATE mytable
SET (payment, version) = (:pymt_amt, mytable_version.next_val)
WHERE ...
每次更新都会导致版本列更新为新的序列号
如果您的应用程序有太多不同的更新语句或访问方法,您不能像您所希望的那样控制,可以考虑将更新版本作为更新触发器的一部分发生。
< P>从您的一些其他问题中,我认为您使用的是一个非常古老的Informix.< /P>版本。 相对较新的版本(10+,可能稍早)支持序列
,这将完全满足您的需求:
CREATE SEQUENCE mytable_version
INCREMENT BY 1 START WITH 1;
然后在更新声明中:
UPDATE mytable
SET (payment, version) = (:pymt_amt, mytable_version.next_val)
WHERE ...
每次更新都会导致版本列更新为新的序列号
如果你的应用程序有太多不同的更新语句或访问方法,你不能像你所希望的那样控制,你可以考虑将更新版本作为更新触发器的一部分来发生。
@ Frank:SE(7.25或可能7.26)不支持序列。@ Frank:SE(7.25或可能7.26)不支持序列。