O2SS0221:不支持调用标识序列 NEXTVAL (错误)

本文介绍了SQL Server 迁移助手 (SSMA) for Oracle 不转换引用序列函数的过程的NEXTVAL一些原因。

背景

SEQUENCE Oracle 中的独立数据库对象,它通常自动为主键/外值创建唯一整数。 NEXTVAL用于访问指定序列的下一个值。

转换SEQUENCE对象时,SSMA 可以使用两种技术,即“序列到序列”和“序列到标识”。 转换为序列时,SSMA 将在每个 Oracle 序列的SQL Server架构中创建相应的SEQUENCE对象。 在“顺序到标识”模式下,SSMA 不会在 SQL Server中创建任何SEQUENCE对象,因此对 Oracle 序列调用 NEXTVAL 将导致错误消息。

示例

请考虑以下示例:

CREATE OR REPLACE PROCEDURE proc1
AS
    t1 NUMBER;
BEGIN
    SELECT customers_seq.NEXTVAL INTO t1 FROM DUAL;
END;

此处有一个存储过程,该存储过程尝试检索序列 customers_seq的下一个值。 如果在 SSMA 中使用 “序列到标识” 模式,则会生成以下错误消息:

O2SS0221:不支持调用标识序列 NEXTVAL

可能的补救措施

若要解决此错误,可以重写 PL/SQL 代码以消除对 NEXTVAL SSMA 项目设置的访问,或更改 SSMA 项目设置以在SQL Server而不是标识列中生成SEQUENCE对象。 若要执行后续操作,请执行以下操作:

  1. 单击“ 工具” 菜单,然后选择“ 项目设置”。
  2. 然后,单击“ 常规 ”选项卡。
  3. 现在,在“序列转换组”下,将“转换序列生成器”设置为“使用SQL Server序列生成器”。
  4. 应用这些设置,然后单击“ 确定”。