SnowConvert AI - Oracle - PACKAGES

Descrição

Use a instrução CREATE PACKAGE para 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

Copy

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;
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

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 ;

Copy

Amostra de padrões da origem

Exemplo de código auxiliar

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
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;
Copy
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

  1. 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

Copy

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;
Copy
Snowflake
CREATE SCHEMA IF NOT EXISTS SCHEMA1_PKG1
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},{"attributes":{"component":"oracle"}}'
;
Copy

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 ] ;
Copy

Amostra de padrões da origem

Exemplo de código auxiliar

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

Declaração de variáveis

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

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;
Copy
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;
Copy
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;
Copy
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;
Copy
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();
Copy
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();
Copy
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

  1. SSC-FDM-0006: A coluna do tipo número pode não se comportar de forma semelhante no Snowflake.