SnowConvert AI - Oracle - PACKAGES¶
Description¶
Utilisez l’instruction
CREATEPACKAGEpour 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
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;
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;
$$;
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 ;
Modèles d’échantillons de sources¶
Échantillon de code auxiliaire¶
Oracle¶
create table table1(id number);
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"}}'
;
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;
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;
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¶
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
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;
Snowflake¶
CREATE SCHEMA IF NOT EXISTS SCHEMA1_PKG1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
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 ] ;
Modèles d’échantillons de sources¶
Échantillon de code auxiliaire¶
Oracle¶
create table table1(id number);
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"}}'
;
Déclaration de variables¶
Oracle¶
CREATE OR REPLACE PACKAGE PKG1 AS
package_variable NUMBER:= 100;
END PKG1;
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);
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;
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;
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;
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;
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();
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();
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¶
SSC-FDM-0006: La colonne de type nombre peut ne pas se comporter de la même manière dans Snowflake.