SnowConvert AI - Oracle - PACKAGES¶
Descrição¶
Use a instrução
CREATEPACKAGEpara criar a especificação de um pacote armazenado, que é uma coleção encapsulada de procedimentos relacionados, funções e outros objetos de programa armazenados juntos no banco de dados. A especificação do pacote declara esses objetos. O corpo do pacote, especificado posteriormente, define esses objetos. (Instrução CREATE PACKAGE da referência de linguagem Oracle PL/SQL)
O Snowflake não tem um equivalente para pacotes Oracle, então, para manter a estrutura, os pacotes são transformados em um esquema, e todos os seus elementos são definidos dentro dele. Além disso, o pacote e seus elementos são renomeados para preservar o nome do esquema original.
BODY¶
Descrição¶
O cabeçalho de PACKAGE BODY é removido e cada procedimento ou definição de função é transformado em uma função ou procedimento autônomo.
CREATE PACKAGE SYNTAX¶
CREATE [ OR REPLACE ]
[ EDITIONABLE | NONEDITIONABLE ]
PACKAGE BODY plsql_package_body_source
Amostra de padrões da origem¶
Nota
As consultas a seguir foram transformadas com a opção PackagesAsSchema desativada.
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;
$$;
Problemas conhecidos¶
Não foram encontrados problemas.
Constantes¶
Especificação de tradução para constantes de pacote
Descrição¶
PACKAGE CONSTANTS pode ser declarado na declaração do pacote ou em PACKAGE BODY. Quando uma constante de pacote é usada em um procedimento, uma nova variável é declarada com o mesmo nome e valor da constante, de modo que o código resultante é bastante semelhante à entrada.
Sintaxe da declaração de constante Oracle¶
constant CONSTANT datatype [NOT NULL] { := | DEFAULT } expression ;
Amostra de padrões da origem¶
Exemplo de código auxiliar¶
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;
Resultado¶
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;
Resultado¶
ID |
|---|
9999 |
Nota
Observe que a definiçãoPROCEDURE está sendo removida, pois não é necessária no Snowflake.
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.
DECLARATION¶
Descrição¶
A declaração é convertida em um esquema, de modo que cada elemento interno é declarado dentro desse esquema. Todos os elementos presentes no pacote são comentados, exceto VARIABLES, que tem uma transformação adequada.
CREATE PACKAGE SYNTAX¶
CREATE [ OR REPLACE ]
[ EDITIONABLE | NONEDITIONABLE ]
PACKAGE plsql_package_source
Amostra de padrões da origem¶
Nota
As consultas a seguir foram transformadas com a opção PackagesAsSchema desativada.
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"}}'
;
Nota
Observe que as definições de FUNCTION e PROCEDURE estão sendo removidas, pois não são necessárias no Snowflake.
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.
VARIABLES¶
Especificação de tradução para variáveis de pacote
Descrição¶
PACKAGE VARIABLES pode ser declarado na declaração do pacote ou em PACKAGE BODY. Devido ao seu comportamento, essas variáveis são convertidas em variáveis de sessão do Snowflake, de modo que cada uso ou atribuição é convertido para seu equivalente no Snowflake.
Sintaxe da declaração Oracle Variable¶
variable datatype [ [ NOT NULL] {:= | DEFAULT} expression ] ;
Amostra de padrões da origem¶
Exemplo de código auxiliar¶
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"}}'
;
Declaração de variáveis¶
Oracle¶
CREATE OR REPLACE PACKAGE PKG1 AS
package_variable NUMBER:= 100;
END PKG1;
Script 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);
Uso de variáveis¶
Os usos de variáveis de pacote são transformados na função do Snowflake GETVARIABLE que acessa o valor atual de uma variável de sessão. Uma conversão explícita é adicionada ao tipo de dados da variável original para manter a equivalência funcional nas operações em que essas variáveis são usadas.
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;
Resultado¶
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;
Resultado¶
ID |
|---|
100 |
Nota
Observe que a definição de PROCEDURE no pacote foi removida, pois não é exigida pelo Snowflake.
Atribuição regular variável¶
Quando uma variável de pacote é atribuída usando o operador :=, a atribuição é substituída por um SnowConvert AI UDF chamado UPDATE_PACKAGE_VARIABLE_STATE que é uma abstração da função [SETVARIABLE] do 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;
Resultado¶
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;
Resultado¶
ID |
|---|
200 |
Nota
Observe que a definição de PROCEDURE no pacote foi removida, pois não é exigida pelo Snowflake.
Atribuição de variável como argumento de saída¶
Quando uma variável de pacote é usada como argumento de saída, uma nova variável é declarada dentro do procedimento. Essa variável armazenará o valor do argumento de saída do procedimento e, em seguida, será usada para atualizar a variável de sessão que faz referência à variável de pacote usando o UPDATE_PACKAGE_VARIABLE_STATE mencionado acima.
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();
Resultado¶
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();
Resultado¶
ID |
|---|
1000 |
Nota
Observe que a definição de PROCEDURE no pacote foi removida, pois não é exigida pelo Snowflake.
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.