10

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

SET IDENTITY_INSERT table ON

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

SET IDENTITY_INSERT table OFF

id是 SQLServer 中的一个 Identity 字段。

我在 ORACLE 中有一个带有序列的表,我找不到显示如何禁用序列并将其设置为以 MAX(id) + 1 重新开始的片段。

任何 ORACLE 专家都可以帮助我吗?

谢谢,罗德里戈。

4

3 回答 3

7

您不必在 Oracle 中禁用标识。由于您使用的是序列,因此不要将其用于该插入。

也就是说,而不是

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

你用

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

至于您关于重新启动序列的第二个问题,我认为这在 SO 中得到回答。

于 2010-05-03T15:13:53.757 回答
1

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

于 2010-05-03T15:26:03.637 回答
0

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

于 2010-05-03T15:41:01.303 回答