我必须将此查询(此处简化)从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专家都可以帮我解决这个问题吗?
谢谢, 罗德里戈。
答案 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值后重新创建它们。