SnowConvert AI - Oracle - PACKAGES

설명

CREATE PACKAGE 문을 사용하여 데이터베이스에 함께 저장된 관련 프로시저, 함수 및 기타 프로그램 오브젝트의 캡슐화된 모음인 저장 패키지에 대한 사양을 작성합니다. 패키지 사양은 이러한 오브젝트를 선언합니다. 이후에 지정되는 패키지 본문은 이러한 오브젝트를 정의합니다. (Oracle PL/SQL Language Reference CREATE PACKAGE 문)

Snowflake에는 Oracle 패키지와 동등한 것이 없으므로 구조를 유지하기 위해 패키지는 스키마로 변환되고 모든 요소는 스미카 내부에 정의됩니다. 또한 원본 스키마 이름을 유지하기 위해 패키지와 해당 요소의 이름이 바뀝니다.

BODY

설명

PACKAGE BODY 의 헤더가 제거되고 각 프로시저 또는 함수 정의가 독립형 함수 또는 프로시저로 변환됩니다.

CREATE PACKAGE SYNTAX

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

Copy

샘플 소스 패턴

참고

다음 쿼리는 PackagesAsSchema 옵션을 비활성화한 상태에서 변환되었습니다.

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

Known Issues

문제가 발견되지 않았습니다.

상수

패키지 상수에 대한 변환 사양

설명

PACKAGE CONSTANTS 는 패키지 선언 또는 PACKAGE BODY 에 선언할 수 있습니다. 프로시저에서 패키지 상수를 사용하면 상수와 동일한 이름과 값으로 새 변수가 선언되므로 결과 코드는 입력된 코드와 매우 유사합니다.

Oracle 상수 선언 구문

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

Copy

샘플 소스 패턴

샘플 보조 코드

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
결과

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
결과

ID

9999

참고

PROCEDURE 정의는 Snowflake에서 필수가 아니므로 삭제됩니다.

Known Issues

문제가 발견되지 않았습니다.

관련 EWIs

  1. SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있습니다.

DECLARATION

설명

선언은 스키마로 변환되므로 각 내부 요소는 이 스키마 내에서 선언됩니다. 패키지에 있는 모든 요소는 적절한 변환이 있는 VARIABLES 을 제외하고 모두 설명되어 있습니다.

CREATE PACKAGE SYNTAX

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

Copy

샘플 소스 패턴

참고

다음 쿼리는 PackagesAsSchema 옵션을 비활성화한 상태에서 변환되었습니다.

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

참고

FUNCTIONPROCEDURE 정의는 모두 Snowflake에서 필수가 아니므로 삭제됩니다.

Known Issues

문제가 발견되지 않았습니다.

관련 EWIs

관련 EWIs 없음.

VARIABLES

패키지 변수의 변환 사양

설명

PACKAGE VARIABLES 은 패키지 선언 또는 PACKAGE BODY 에 선언할 수 있습니다. 동작에 따라 이러한 변수는 Snowflake 세션 변수 로 변환되므로 각 사용 또는 할당은 Snowflake에서 해당 변수에 해당하는 변수로 변환됩니다.

Oracle 변수 선언 구문

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

샘플 소스 패턴

샘플 보조 코드

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
    package_variable NUMBER:= 100;
END PKG1;
Copy
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);
Copy

변수 사용

패키지 변수 사용은 현재 세션 변수의 값에 액세스하는 Snowflake GETVARIABLE 함수로 변환되어 세션 변수의 현재 값에 액세스합니다. 이러한 변수가 사용되는 작업에서 기능적 동등성을 유지하기 위해 원래 변수 데이터 타입에 명시적 형변환이 추가됩니다.

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
결과

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
결과

ID

100

참고

패키지의 PROCEDURE 정의는 Snowflake에서 필수가 아니므로 제거되었습니다.

변수 정규 할당

:= 연산자를 사용하여 패키지 변수를 할당하는 경우 할당은 Snowflake SETVARIABLE 함수의 추상화인 UPDATE_PACKAGE_VARIABLE_STATE라는 SnowConvert AI UDF로 대체됩니다.

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
결과

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
결과

ID

200

참고

패키지의 PROCEDURE 정의는 Snowflake에서 필수가 아니므로 제거되었습니다.

출력 인자로 변수 할당

패키지 변수가 출력 인자로 사용되면 프로시저 내에서 새 변수가 선언되며, 이 변수는 프로시저의 출력 인자 값을 포착한 후 위에서 언급한 UPDATE_PACKAGE_VARIABLE_STATE를 사용하여 패키지 변수를 참조하는 세션 변수를 업데이트하는 데 사용됩니다.

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
결과

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
결과

ID

1000

참고

패키지의 PROCEDURE 정의는 Snowflake에서 필수가 아니므로 제거되었습니다.

Known Issues

문제가 발견되지 않았습니다.

관련 EWIs

  1. SSC-FDM-0006: 숫자 유형 열이 Snowflake에서 유사하게 동작하지 않을 수 있습니다.