O2SS0179:打包变量 (常量) 数据类型无法识别 (错误)

本文介绍在包中使用该类型的变量时,SQL Server 迁移助手 (SSMA) oracle 不会转换几个 Oracle 数据类型 (的原因,例如MLSLABEL) 。

背景

数据类型 MLSLABEL 由受信任的 Oracle 使用,用于存储操作系统标签的二进制格式。 受信任的 Oracle 使用标签来控制对信息的访问。 列的最大宽度 MLSLABEL 为 255 字节。 任何在操作系统上有效的标签都可以插入到列中 MLSLABEL 。 将标签 MLSLABEL 插入列时,受信任的 Oracle 会隐式将数据转换为标签的二进制格式。

为了存储打包的变量,SSMA 使用特殊函数 ((如 ssma_oracle.set_pv_varchar) )从 ssma_oracle.db_storage 表中检索值。 有关 SSMA 如何转换包变量的详细信息,请参阅 模拟 Oracle 包变量 一文。

每当 SSMA 尝试转换不受支持的数据类型时,它就会生成错误,因为 SSMA 在SQL Server中找不到相应的类型。

示例

当 SSMA 尝试转换以下 PL/SQL 块时

CREATE OR REPLACE PACKAGE MLSLABEL_PKG
IS
    label mlslabel;
END MLSLABEL_PKG;

CREATE OR REPLACE PACKAGE BODY MLSLABEL_PKG
IS
BEGIN
    label := null;
END MLSLABEL_PKG;

它生成以下错误:

O2SS0179:无法识别打包变量 (常量) 数据类型

可能的补救措施

应考虑将不支持的数据类型替换为任何其他受支持的数据类型 (,例如 VARCHAR) ,如下所示:

CREATE OR REPLACE PACKAGE MLSLABEL_PKG
IS
    label Varchar(255);
END MLSLABEL_PKG;

CREATE OR REPLACE PACKAGE BODY MLSLABEL_PKG
IS
BEGIN
    label := null;
END MLSLABEL_PKG;