SnowConvert AI – Oracle – PACKAGES¶
Beschreibung¶
Verwenden Sie die Anweisung
CREATEPACKAGE, 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
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;
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;
$$;
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 ;
Beispielhafte Quellcode-Muster¶
Beispiel für Hilfscode¶
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;
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;
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¶
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
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;
Snowflake¶
CREATE SCHEMA IF NOT EXISTS SCHEMA1_PKG1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
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 ] ;
Beispielhafte Quellcode-Muster¶
Beispiel für Hilfscode¶
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"}}'
;
Variablendeklaration¶
Oracle¶
CREATE OR REPLACE PACKAGE PKG1 AS
package_variable NUMBER:= 100;
END PKG1;
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);
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;
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;
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;
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;
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();
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();
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¶
SSC-FDM-0006: Spalte vom Typ ‚number‘ verhält sich in Snowflake möglicherweise nicht ähnlich.