Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否可以定义在更新行时自动递增的串行数据类型?_Sql_Auto Increment_Informix - Fatal编程技术网

Sql 是否可以定义在更新行时自动递增的串行数据类型?

Sql 是否可以定义在更新行时自动递增的串行数据类型?,sql,auto-increment,informix,Sql,Auto Increment,Informix,将新行添加到包含串行列的表中时,提交该行时,将为该列指定下一个最高整数值。我是否可以定义一个串行数据类型,当使用以前分配的串行值更新行时,该数据类型将自动递增?在datablade中?我目前正在对整型列使用以下功能let intcol=select max(intcol)+1 from table。在我的应用程序中,当客户对pymt感兴趣时,前一个票号会被更新为下一个可用票号 对于甲骨文,没有 通常使用预插入触发器和序列完成。对于Oracle,否 通常使用预插入触发器和序列完成。我认为您需要一个

将新行添加到包含串行列的表中时,提交该行时,将为该列指定下一个最高整数值。我是否可以定义一个串行数据类型,当使用以前分配的串行值更新行时,该数据类型将自动递增?在datablade中?我目前正在对整型列使用以下功能
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)不支持序列。