SnowConvert AI – Oracle – PACKAGES

Beschreibung

Verwenden Sie die Anweisung CREATE PACKAGE, um die Spezifikation für ein gespeichertes Paket zu erstellen. Dabei handelt es sich um eine gekapselte Sammlung verwandter Prozeduren, Funktionen und anderer Programmobjekte, die gemeinsam in der Datenbank gespeichert werden. Die Paketspezifikation deklariert diese Objekte. Der Paket-Body, der später angegeben wird, definiert diese Objekte. (Oracle PL/SQL Language Reference CREATE PACKAGE Statement)

Snowflake hat kein Äquivalent für Oracle-Pakete. Um die Struktur beizubehalten, werden die Pakete in ein Schema umgewandelt und alle Elemente werden darin definiert. Außerdem werden das Paket und seine Elemente umbenannt, um den ursprünglichen Schemanamen beizubehalten.

BODY

Beschreibung

Die Kopfzeile des PACKAGE BODY wird entfernt und jede Prozedur- oder Funktionsdefinition wird in eine eigenständige Funktion oder Prozedur umgewandelt.

CREATE PACKAGE SYNTAX

CREATE [ OR REPLACE ]
[ EDITIONABLE | NONEDITIONABLE ]
PACKAGE BODY plsql_package_body_source

Copy

Beispielhafte Quellcode-Muster

Bemerkung

Die folgenden Abfragen wurden mit der deaktivierten Option PackagesAsSchema umgewandelt.

Oracle

CREATE OR REPLACE PACKAGE BODY SCHEMA1.PKG1 AS
    PROCEDURE procedure1 AS
        BEGIN
            dbms_output.put_line('hello world');
        END;
END package1;
Copy
Snowflake
Snowflake
CREATE OR REPLACE PROCEDURE SCHEMA1_PKG1.procedure1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        --** SSC-FDM-OR0035 - CHECK UDF IMPLEMENTATION FOR DBMS_OUTPUT.PUT_LINE_UDF. **
        CALL DBMS_OUTPUT.PUT_LINE_UDF('hello world');
    END;
$$;
Copy

Bekannte Probleme

Es wurden keine Probleme gefunden.

Konstanten

Übersetzungsspezifikation für Paketkonstanten

Beschreibung

PACKAGE CONSTANTS kann entweder in der Paketdeklaration oder im PACKAGE BODY deklariert werden. Wenn eine Paketkonstante in einer Prozedur verwendet wird, wird eine neue Variable mit demselben Namen und Wert wie die Konstante deklariert, so dass der resultierende Code der Eingabe ziemlich ähnlich ist.

Syntax der Konstantendeklaration von Oracle

constant CONSTANT datatype [NOT NULL] { := | DEFAULT } expression ;

Copy

Beispielhafte Quellcode-Muster

Beispiel für Hilfscode

Oracle
create table table1(id number);
Copy
Snowflake
CREATE OR REPLACE TABLE table1 (id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Copy
Oracle
CREATE OR REPLACE PACKAGE PKG1 AS
    PROCEDURE procedure1;
    package_constant CONSTANT NUMBER:= 9999;
END PKG1;

CREATE OR REPLACE PACKAGE BODY PKG1 AS
    PROCEDURE procedure1 AS
    BEGIN
        INSERT INTO TABLE1(ID) VALUES(package_constant);
    END;
END PKG1;

CALL PKG1.procedure1();

SELECT * FROM TABLE1;
Copy
Ergebnis

ID

9999

Snowflake
CREATE SCHEMA IF NOT EXISTS PKG1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

CREATE OR REPLACE PROCEDURE PKG1.procedure1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        PACKAGE_CONSTANT NUMBER := 9999;
    BEGIN
        INSERT INTO TABLE1(ID) VALUES(:PACKAGE_CONSTANT);
    END;
$$;

CALL PKG1.procedure1();

SELECT * FROM
    TABLE1;
Copy
Ergebnis

ID

9999

Bemerkung

Beachten Sie, dass die Definition vonPROCEDURE entfernt wird, da sie in Snowflake nicht erforderlich ist.

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

  1. SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.

DECLARATION

Beschreibung

Die Deklaration wird in ein Schema umgewandelt, so dass jedes innere Element innerhalb dieses Schemas deklariert wird. Alle Elemente des Pakets sind kommentiert, mit Ausnahme der VARIABLES, die eine eigene Transformation haben.

CREATE PACKAGE SYNTAX

CREATE [ OR REPLACE ]
[ EDITIONABLE | NONEDITIONABLE ]
PACKAGE plsql_package_source

Copy

Beispielhafte Quellcode-Muster

Bemerkung

Die folgenden Abfragen wurden mit der deaktivierten Option PackagesAsSchema umgewandelt.

Oracle

CREATE OR REPLACE PACKAGE SCHEMA1.PKG1 AS
   -- Function Declaration
   FUNCTION function_declaration(param1 VARCHAR) RETURN INTEGER;

   -- Procedure Declaration
   PROCEDURE procedure_declaration(param1 VARCHAR2, param2 VARCHAR2);

END PKG1;
Copy
Snowflake
CREATE SCHEMA IF NOT EXISTS SCHEMA1_PKG1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Copy

Bemerkung

Beachten Sie, dass die Definitionen FUNCTION und PROCEDURE entfernt werden, da sie in Snowflake nicht erforderlich sind.

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

Keine zugehörigen EWIs.

VARIABLES

Übersetzungsspezifikation für Paketvariablen

Beschreibung

PACKAGE VARIABLES kann entweder in der Paketdeklaration oder im PACKAGE BODY deklariert werden. Aufgrund ihres Verhaltens werden diese Variablen in Snowflake-Sitzungsvariablen umgewandelt, so dass jede Verwendung oder Zuweisung in ihre Entsprechung in Snowflake übersetzt wird.

Syntax der Variablendeklaration von Oracle

variable datatype [ [ NOT NULL] {:= | DEFAULT} expression ] ;
Copy

Beispielhafte Quellcode-Muster

Beispiel für Hilfscode

Oracle
create table table1(id number);
Copy
Snowflake
CREATE OR REPLACE TABLE table1 (id NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/
)
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Copy

Variablendeklaration

Oracle
CREATE OR REPLACE PACKAGE PKG1 AS
    package_variable NUMBER:= 100;
END PKG1;
Copy
Snowflake Scripting
CREATE SCHEMA IF NOT EXISTS PKG1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

SET "PKG1.PACKAGE_VARIABLE" = '' || (100);
Copy

Verwendung von Variablen

Die Verwendung von Paketvariablen wird in die Snowflake GETVARIABLE-Funktion umgewandelt, die auf den aktuellen Wert einer Sitzungsvariablen zugreift. Eine explizite Umwandlung wird zum ursprünglichen Variablendatentyp hinzugefügt, um die Funktionsäquivalenz bei den Operationen, bei denen diese Variablen verwendet werden, zu erhalten.

Oracle
CREATE OR REPLACE PACKAGE PKG1 AS
    PROCEDURE procedure1;
    package_variable NUMBER:= 100;
END PKG1;

CREATE OR REPLACE PACKAGE BODY PKG1 AS
    PROCEDURE procedure1 AS
    BEGIN
        INSERT INTO TABLE1(ID) VALUES(package_variable);
    END;
END PKG1;

CALL SCHEMA1.PKG1.procedure1();

SELECT * FROM TABLE1;
Copy
Ergebnis

ID

100

Snowflake
CREATE SCHEMA IF NOT EXISTS PKG1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

SET "PKG1.PACKAGE_VARIABLE" = '' || (100);

CREATE OR REPLACE PROCEDURE PKG1.procedure1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        INSERT INTO TABLE1(ID) VALUES(GETVARIABLE('PKG1.PACKAGE_VARIABLE') :: NUMBER);
    END;
$$;

CALL SCHEMA1.PKG1.procedure1();

SELECT * FROM
    TABLE1;
Copy
Ergebnis

ID

100

Bemerkung

Beachten Sie, dass die PROCEDURE-Definition im Paket entfernt wurde, da sie von Snowflake nicht benötigt wird.

Reguläre Variablenzuweisung

Wenn eine Paketvariable mit dem :=-Operator zugewiesen wird, wird die Zuweisung durch eine SnowConvert AI UDF namens UPDATE_PACKAGE_VARIABLE_STATE ersetzt, die eine Abstraktion der Snowflake-Funktion SETVARIABLE ist.

Oracle

Oracle

CREATE OR REPLACE PACKAGE PKG1 AS
    PROCEDURE procedure1;
    package_variable NUMBER:= 100;
END PKG1;

CREATE OR REPLACE PACKAGE BODY PKG1 AS
    PROCEDURE procedure1 AS
    BEGIN
        package_variable := package_variable + 100;
        INSERT INTO TABLE1(ID) VALUES(package_variable);
    END;
END PKG1;

CALL PKG1.procedure1();

SELECT * FROM TABLE1;
Copy
Ergebnis

ID

200

Snowflake

CREATE SCHEMA IF NOT EXISTS PKG1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;

SET "PKG1.PACKAGE_VARIABLE" = '' || (100);

CREATE OR REPLACE PROCEDURE PKG1.procedure1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        CALL UPDATE_PACKAGE_VARIABLE_STATE_UDF('PKG1.PACKAGE_VARIABLE', TO_VARCHAR(GETVARIABLE('PKG1.PACKAGE_VARIABLE') :: NUMBER + 100));
        INSERT INTO TABLE1(ID) VALUES(GETVARIABLE('PKG1.PACKAGE_VARIABLE') :: NUMBER);
    END;
$$;

CALL PKG1.procedure1();

SELECT * FROM
    TABLE1;
Copy
Ergebnis

ID

200

Bemerkung

Beachten Sie, dass die PROCEDURE-Definition im Paket entfernt wurde, da sie von Snowflake nicht benötigt wird.

Variablenzuweisung als Ausgabeargument

Wenn eine Paketvariable als Ausgabeargument verwendet wird, wird innerhalb der Prozedur eine neue Variable deklariert. Diese Variable ruft den Wert des Ausgabearguments der Prozedur ab. Die Variable wird dann verwendet, um die Sitzungsvariable zu aktualisieren, die mit UPDATE_PACKAGE_VARIABLE_STATE auf die Paketvariable verweist, wie oben erwähnt.

Oracle
CREATE OR REPLACE PACKAGE PKG1 AS
    PROCEDURE procedure1;
    PROCEDURE procedure2(out_param OUT NUMBER);
    package_variable NUMBER:= 100;
END PKG1;

CREATE OR REPLACE PACKAGE BODY PKG1 AS
    PROCEDURE procedure1 AS
    BEGIN
        procedure2(package_variable);
        INSERT INTO TABLE1(ID) VALUES(package_variable);
    END;
    PROCEDURE procedure2 (out_param OUT NUMBER) AS
    BEGIN
        out_param := 1000;
    END;
END PKG1;

CALL PKG1.procedure1();
Copy
Ergebnis

ID

1000

Snowflake
CREATE SCHEMA IF NOT EXISTS PKG1
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
;

SET "PKG1.PACKAGE_VARIABLE" = '' || (100);

--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **
CREATE OR REPLACE PROCEDURE PKG1.procedure1 ()
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    DECLARE
        PKG1_PACKAGE_VARIABLE VARIANT;
    BEGIN
        CALL PKG1.
        procedure2(:PKG1_PACKAGE_VARIABLE);
        CALL UPDATE_PACKAGE_VARIABLE_STATE_UDF('PKG1.PACKAGE_VARIABLE', TO_VARCHAR(:PKG1_PACKAGE_VARIABLE));
        INSERT INTO TABLE1(ID) VALUES(GETVARIABLE('PKG1.PACKAGE_VARIABLE') :: NUMBER);
    END;
$$;

CREATE OR REPLACE PROCEDURE PKG1.procedure2 (out_param OUT NUMBER(38, 18))
RETURNS VARCHAR
LANGUAGE SQL
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "oracle",  "convertedOn": "07/16/2025",  "domain": "no-domain-provided" }}'
EXECUTE AS CALLER
AS
$$
    BEGIN
        out_param := 1000;
    END;
$$;

CALL PKG1.procedure1();
Copy
Ergebnis

ID

1000

Bemerkung

Beachten Sie, dass die PROCEDURE-Definition im Paket entfernt wurde, da sie von Snowflake nicht benötigt wird.

Bekannte Probleme

Es wurden keine Probleme gefunden.

Zugehörige EWIs

  1. SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.