哪个命令会替换Oracle中SQLServer的IDENTITY INSERT ON / OFF?

时间:2010-05-03 15:04:12

标签: oracle tsql migration sequence identity-insert

我必须将此查询(此处简化)从T-SQL迁移到ORACLE

SET IDENTITY_INSERT table ON

INSERT INTO table (id, value) VALUES (1, 2)

SET IDENTITY_INSERT table OFF

id是SQLServer中的标识字段。

我在ORACLE中有一个与序列相同的表,我找不到一个片段,显示如何禁用序列并将其设置为使用MAX(id)+ 1再次启动。

任何ORACLE专家都可以帮我解决这个问题吗?

谢谢, 罗德里戈。

3 个答案:

答案 0 :(得分:7)

您不必在Oracle中禁用身份。由于您正在使用序列,因此不要将其用于该插入。

即代替

insert into table (id, values) values (table_seq.nextval, 2)

你使用

insert into table (id, values) values (1, 2)

关于重新启动序列的第二个问题,我认为在SO中已经回答here

答案 1 :(得分:1)

以这种方式混淆由Oracle序列填充的列似乎是一个坏主意。在Oracle中,通常通过带触发器的序列维护一个列。如果您开始打开和关闭此功能,并重置序列ad lib,则在另一个进程需要时可能会出现序列不可用的风险,或者重置为已经使用但未提交的值。

答案 2 :(得分:0)

删除序列并在完成max + 1值后重新创建它们。