我有一个insert命令,它将从一个临时表中获取记录并插入到oracle 10g中的实际事务表中。在此插入期间,我想在交易表中增加一个列值,而不管暂存区域中存在的值。
sql编程有没有这样的'i ++'选项?这样我就可以从实际的事务表中获取最大值并将其递增。
或者,还有其他解决办法吗?
答案 0 :(得分:0)
你可以使用序列!在Oracle文档中阅读有关序列here的更多信息。
序列是独立的数据库对象,它在指定的序列中生成新的数字。
,例如,如果你只是说
CREATE SEQUENCE tblid_seq;
将创建一个名为tblid_seq
的新序列,从1开始,并以1递增。
您可以对序列使用nextval
和currval
方法。
例如,每次使用tblid_seq.nextval
时,您都会获得递增的值。
使用tblid_seq.currval
时,您将获得tblid_seq.nextval
提取的最后一个值。
如何使用它?简单。在SQL中:
INSERT INTO (tblid, val1) VALUES (tblid_seq.nextval, 'Some value');
在PL / SQL触发器,过程,函数或匿名块中,您可以使用:
var1 := tblid_seq.nextval; -- var1 is of INTEGER data type.
序列独立于任何其他数据库对象,包括您使用序列生成值的表。序列也独立于事务,您不能ROLLBACK序列值。因此,如果您可以在生成的值中存在间隙,请使用序列。