SnowConvert AI - Oracle - PACKAGES

Description

Utilisez l’instruction CREATE PACKAGE pour créer la spécification d’un paquet stocké, qui est une collection encapsulée de procédures stockées, de fonctions et d’autres objets de programme stockés ensemble dans la base de données. La spécification du paquet déclare ces objets. Le corps du paquet, spécifié ultérieurement, définit ces objets. (Référence linguistique Oracle PL/SQL Instruction CREATE PACKAGE)

Snowflake n’a pas d’équivalent pour les paquets Oracle. Par conséquent, afin de maintenir leur structure, les paquets sont transformés en un schéma dans lequel tous les éléments des paquets sont définis. En outre, les paquets et leurs éléments sont renommés pour préserver le nom du schéma original.

BODY

Description

L’en-tête de PACKAGE BODY est supprimé et chaque définition de procédure ou de fonction est transformée en une fonction ou procédure autonome.

CREATE PACKAGE SYNTAX

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

Copy

Modèles d’échantillons de sources

Note

Les requêtes suivantes ont été transformées avec l’option PackagesAsSchema désactivée.

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

Problèmes connus

Aucun problème n’a été constaté.

Constantes

Spécification de traduction pour les constantes de paquet

Description

PACKAGE CONSTANTS peut être déclaré soit dans la déclaration du paquet, soit dans PACKAGE BODY. Lorsqu’une constante du paquet est utilisée dans une procédure, une nouvelle variable est déclarée avec le même nom et la même valeur que la constante, de sorte que le code résultant est assez similaire à l’entrée.

Syntaxe de déclaration constante d’Oracle

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

Copy

Modèles d’échantillons de sources

Échantillon de code auxiliaire

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
Résultat

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
Résultat

ID

9999

Note

Notez que la définition dePROCEDURE est supprimée car elle n’est pas nécessaire dans Snowflake.

Problèmes connus

Aucun problème n’a été constaté.

EWIs connexes

  1. SSC-FDM-0006: La colonne de type nombre peut ne pas se comporter de la même manière dans Snowflake.

DECLARATION

Description

La déclaration est convertie en schéma, de sorte que chaque élément interne est déclaré à l’intérieur de ce schéma. Tous les éléments présents dans le paquet sont commentés à l’exception de VARIABLES qui bénéficie d’une transformation adéquate.

CREATE PACKAGE SYNTAX

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

Copy

Modèles d’échantillons de sources

Note

Les requêtes suivantes ont été transformées avec l’option PackagesAsSchema désactivée.

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

Note

Notez que les définitions de FUNCTION et PROCEDURE sont supprimées car elles ne sont pas exigées dans Snowflake.

Problèmes connus

Aucun problème n’a été constaté.

EWIs connexes

Pas d’EWIs connexes.

VARIABLES

Spécification de traduction pour les variables de paquet

Description

PACKAGE VARIABLES peut être déclaré soit dans la déclaration du paquet, soit dans PACKAGE BODY. En raison de leur comportement, ces variables sont converties en variables de session Snowflake, de sorte que chaque utilisation ou affectation est traduite en son équivalent dans Snowflake.

Syntaxe de déclaration des variables Oracle

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

Modèles d’échantillons de sources

Échantillon de code auxiliaire

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

Déclaration de variables

Oracle
CREATE OR REPLACE PACKAGE PKG1 AS
    package_variable NUMBER:= 100;
END PKG1;
Copy
Exécution de scripts 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);
Copy

Utilisation des variables

L’utilisation des variables de paquet est transformée en fonction Snowflake GETVARIABLE qui accède à la valeur courante d’une variable de session. Une conversion explicite est ajoutée au type de données de la variable d’origine afin de maintenir l’équivalence fonctionnelle dans les opérations où ces variables sont utilisées.

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
Résultat

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
Résultat

ID

100

Note

Notez que la définition de PROCEDURE dans le paquet est supprimée car elle n’est pas exigée par Snowflake.

Affectation régulière de variables

Lorsqu’une variable de paquet est affectée à l’aide de l’opérateur  : =, l’affectation est remplacée par une fonction SnowConvert AI UDF appelée UPDATE_PACKAGE_VARIABLE_STATE qui est une abstraction de la fonction [SETVARIABLE] de Snowflake(https://docs.snowflake.com/en/sql-reference/session-variables.html#session-variable-functions).

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
Résultat

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
Résultat

ID

200

Note

Notez que la définition de PROCEDURE dans le paquet est supprimée car elle n’est pas exigée par Snowflake.

Affectation d’une variable en tant qu’argument de sortie

Lorsqu’une variable de paquet est utilisée comme argument de sortie, une nouvelle variable est déclarée dans la procédure, cette variable intercepte la valeur de l’argument de sortie de la procédure, puis la variable sera utilisée pour mettre à jour la variable de session qui fait référence à la variable du paquet à l’aide de la fonction UPDATE_PACKAGE_VARIABLE_STATE e ci-dessus.

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
Résultat

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
Résultat

ID

1000

Note

Notez que la définition de PROCEDURE dans le paquet est supprimée car elle n’est pas exigée par Snowflake.

Problèmes connus

Aucun problème n’a été constaté.

EWIs connexes

  1. SSC-FDM-0006: La colonne de type nombre peut ne pas se comporter de la même manière dans Snowflake.