Freigeben über


O2SS0260: Umschlossenes Paket kann nicht konvertiert werden (Fehler)

In diesem Artikel wird erläutert, warum der SQL Server-Migrations-Assistent (SSMA) für Oracle den umschlossenen Code nicht konvertiert.

Hintergrund

Das Umschließen (Verschlüsseln) ist ein Prozess zum Ausblenden des Quellcodes. Wrapping hilft, den Quellcode vor den Wettbewerbern und anderen zu schützen, die ihn missbrauchen könnten. In Oracle kann man den Quellcode mithilfe von DBMS_DDL Unterprogramen umschließen.

Immer wenn Sie versuchen, den umschlossenen (verschlüsselten) PL/SQL-Code zu konvertieren, gibt SSMA eine Warnmeldung an, die besagt, dass die Required code is wrapped. Wenn Sie diese Warnung überspringen, indem Sie die Schaltfläche "Weiter " auswählen, generiert SSMA eine Fehlermeldung. Außerdem können Sie nur die Konvertierungsstatistiken und nicht den Code im Fenster "Bewertungsbericht " anzeigen, da der Code umschlossen ist.

Beispiel

Im folgenden Beispiel deklarieren Sie zwei Variablen, eine zum Speichern der Paketspezifikation und eine weitere zum Speichern des Pakettexts als Zeichenfolgen. Diese Variablen werden dann an eine vordefinierte gespeicherte Prozedur DBMS_DDL.CREATE_WRAPPEDübergeben, die ein umschlossenes Paket erstellt.

DECLARE
    src_pkg_header VARCHAR2(32767);
    src_pkg_body VARCHAR2(32767);
BEGIN
    src_pkg_header :=
        'CREATE OR REPLACE PACKAGE Wrapped_PKG IS ' ||
            'x pls_integer; ' ||
        'END Wrapped_PKG; ';

    src_pkg_body :=
        'CREATE OR REPLACE PACKAGE BODY Wrapped_PKG IS ' ||
        'BEGIN ' ||
            'x := 10; ' ||
        'END Wrapped_PKG;';

    SYS.DBMS_DDL.CREATE_WRAPPED(ddl => src_pkg_header);
    SYS.DBMS_DDL.CREATE_WRAPPED(ddl => src_pkg_body);
END;

Wenn Sie den vorherigen Code in Oracle ausführen, wird ein Paket mit Namen Wrapped_PKG erstellt. Dieses Paket wird im verschlüsselten Format erstellt, sodass Sie den Text/Code in diesem Paket nicht anzeigen können.

Wenn Sie versuchen, den Paketcode Wrapped_PKG mit SSMA zu konvertieren, wird die folgende Fehlermeldung angezeigt:

O2SS0260: Umschlossenes Paket kann nicht konvertiert werden

Mögliche Abhilfen

Die Lösung für den vorherigen Fehler kann in die folgenden Schritte unterteilt werden:

Schritt 1: Erstellen und Ausführen nur des Paketcodes in Oracle. Konvertieren Sie diesen Code dann mit SSMA in den entsprechenden SQL Server-Code.

CREATE OR REPLACE PACKAGE Wrapped_PKG IS
    x pls_integer;
END Wrapped_PKG;

CREATE OR REPLACE PACKAGE BODY Wrapped_PKG IS
BEGIN
    x := 10;
END Wrapped_PKG;

Das folgende Beispiel ist der entsprechende SQL Server-Code für das vorherige Paket:

CREATE PROCEDURE dbo.WRAPPED_PKG$SSMA_Initialize_Package
AS
BEGIN
    EXECUTE ssma_oracle.db_clean_storage

    EXECUTE ssma_oracle.set_pv_int
        DB_NAME(),
        'DBO',
        'WRAPPED_PKG',
        'X',
        10
END

Schritt 2: Fügen Sie WITH ENCRYPTION Schlüsselwort (keyword) dem konvertierten Transact-SQL-Code hinzu, wie im folgenden Beispiel gezeigt. Dadurch wird Ihr Code in SQL Server verschlüsselt.

CREATE PROCEDURE dbo.WRAPPED_PKG$SSMA_Initialize_Package
WITH ENCRYPTION
AS
BEGIN
    EXECUTE ssma_oracle.db_clean_storage

    EXECUTE ssma_oracle.set_pv_int
        DB_NAME(),
        'DBO',
        'WRAPPED_PKG',
        'X',
        10
END