SnowConvert: Oracle

Oracle용 SnowConvert 란 무엇인가요?

SnowConvert 는 Oracle SQL 및 PL/SQL 을 이해하고 다음과 같은 변환을 수행하는 소프트웨어입니다.

SnowConvert 용어

이러한 코드 변환의 마법에 빠져들기 전에 몇 가지 용어/정의에 대한 설명서를 통해 그 의미를 이해할 수 있도록 몇 가지 용어를 소개합니다.

  • _ SQL (구조화된 쿼리 언어): _ 대부분의 최신 데이터베이스 아키텍처에서 데이터를 저장, 조작, 검색하기 위한 표준 언어입니다.

  • _ PL/SQL: _ SQL 의 프로시저 언어. 이것은 Oracle에서 생성했으며, 여전히 Oracle에서 저장 프로시저 및 함수를 위한 스크립트 언어로 사용되고 있습니다.

  • _ SnowConvert _ : Oracle 파일을 안전하고 자동으로 Snowflake 클라우드 데이터 플랫폼으로 변환하는 소프트웨어입니다.

  • _ 변환 규칙 또는 변환 규칙: _ SnowConvert 가 소스 코드의 일부에서 변환하고 예상 대상 코드를 결정할 수 있도록 허용하는 규칙입니다.

  • _ 구문 분석: _ 구문 분석 또는 구문 분석은 SnowConvert 가 소스 코드를 이해하고 변환 규칙을 처리하기 위해 내부 데이터 구조를 구축하는 초기 과정입니다.

Snowflake SnowConvert 가 수행할 수 있는 몇 가지 코드 변환에 대해 자세히 알아보겠습니다.

코드 변환

Oracle SQL 에서 Snowflake SQL 로

SnowConvert 의 경우 SQL 에서 Oracle 소스 코드를 가져와서 소스 코드의 데이터 정의 언어(DDL), 데이터 조작 언어(DML), 함수를 Snowflake SQL 에서 해당 SQL 로 변환합니다.

다음은 간단한 CREATE TABLE 문을 변환하는 예제입니다.

소스 코드입니다.

CREATE TABLE "MyTable"
(
  "COL1" NUMBER,
  "COL2" NUMBER,
  "COL3" NUMBER GENERATED ALWAYS AS (COL1 * COL2) VIRTUAL,
  "COL4" LONG,
  "COL5" CLOB,
  "COL6" ROWID,
  "COL7" NVARCHAR2(10),
  "COL8" RAW(255),
  CONSTRAINT "PK" PRIMARY KEY ("COL1")
);
Copy

마이그레이션된 Snowflake SQL 코드:

CREATE OR REPLACE TABLE "MyTable"
  (
    "COL1" NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
    "COL2" NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/,
    "COL3" NUMBER(38, 18) /*** SSC-FDM-0006 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE. ***/ AS (COL1 * COL2),
    "COL4" VARCHAR,
    "COL5" VARCHAR,
    "COL6" VARCHAR(18) !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWID DATA TYPE CONVERTED TO VARCHAR ***/!!!,
    "COL7" VARCHAR(10),
    "COL8" BINARY,
    CONSTRAINT "PK" PRIMARY KEY ("COL1")
  )
  COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
  ;
Copy

이 변환된 SQL 에서 많은 항목을 변환하고 있음을 알 수 있습니다. 몇 가지 주요 사항을 소개합니다.

  • 사용자가 지정하지 않은 경우 모든 테이블 및 뷰 이름에 대해 기본적으로 PUBLIC 스키마를 추가합니다

  • CREATE TABLE 에서 CREATE OR REPLACE TABLE

  • 데이터 타입 변환:

    • LONG 에서 VARCHAR

    • CLOB 에서 VARCHAR

    • ROWID 에서 VARCHAR

    • NVARCHAR2 에서 VARCHAR

    • RAW 에서 BINARY

  • 데이터 타입 특성: GENERATEDALWAYSAS (COL1*COL2) VIRTUAL ~ AS (COL1*COL2)

데이터 타입과 그에 상응하는 데이터 타입에 대한 자세한 내용은 데이터 타입 섹션을 참조하십시오. 더 많은 예제는 나머지 설명서에서 확인할 수 있습니다.

Oracle PL/SQL

SnowConvert 는 Oracle 저장 프로시저와 함수(PL / SQL)를 가져와서 Snowflake Scripting 또는 JavaScript 에 내장된 Snowflake SQL 로 변환합니다. Oracle CREATE PROCEDUREREPLACE PROCEDURE 구문은 Snowflake CREATE OR REPLACE PROCEDURE 구문으로 대체됩니다.

다음은 로깅에 사용되는 테이블에 삽입을 수행하는 간단한 CREATEPROCEDURE 를 Oracle에서 변환하는 예제입니다.

참고

이 예제는 Snowflake Scripting과 JavaScript 에서 모두 사용됩니다.

CREATE OR REPLACE PROCEDURE SC_DEMO.PROC_LOG 
      (final_proc  VARCHAR2, 
       final_message   VARCHAR2,
       logger_type VARCHAR2 DEFAULT 'I')
AS
BEGIN
  INSERT INTO SC_DEMO.PROC_LOG_TABLE
    VALUES (SC_DEMO.final_logging_seq.NEXTVAL,
            sysdate,
            SUBSTR(logger_type, 1, 1),
            SUBSTR(final_proc, 1, 30),
            SUBSTR(final_message, 1, 1024));
  COMMIT;

END;
Copy

Snowflake Scripting로

Snowflake Scripting은 Snowflake SQL 의 확장 기능으로 작동하며, 절차적 논리를 지원하여 Oracle PL/SQL 의 저장 프로시저를 만들고 유사한 동작 및 문을 복제할 수 있게 해줍니다.

마이그레이션 예제

CREATE OR REPLACE PROCEDURE SC_DEMO.PROC_LOG
(final_proc VARCHAR, final_message VARCHAR,
 logger_type VARCHAR DEFAULT 'I')
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 SC_DEMO.PROC_LOG_TABLE
      VALUES (SC_DEMO.final_logging_seq.NEXTVAL, CURRENT_TIMESTAMP(),
              SUBSTR(:logger_type, 1, 1),
              SUBSTR(:final_proc, 1, 30),
              SUBSTR(:final_message, 1, 1024));
    --** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
    COMMIT;
  END;
$$;
Copy

대상 JavaScript

JavaScript 를 스크립트 언어로 호출하면 모든 내부 문은 JavaScript 로 변환됩니다. JavaScript API 에 대한 이해도를 높이려면 이 설명서 를 확인하십시오.

마이그레이션 예제

-- Additional Params: -t JavaScript
CREATE OR REPLACE PROCEDURE SC_DEMO.PROC_LOG
(final_proc STRING, final_message STRING,
 logger_type STRING DEFAULT 'I')
RETURNS STRING
LANGUAGE JAVASCRIPT
COMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTE AS CALLER
AS
$$
  // SnowConvert Helpers Code section is omitted.

  EXEC(`INSERT INTO SC_DEMO.PROC_LOG_TABLE
  VALUES (SC_DEMO.final_logging_seq.NEXTVAL, CURRENT_TIMESTAMP(),
            SUBSTR(?, 1, 1),
            SUBSTR(?, 1, 30),
            SUBSTR(?, 1, 1024))`,[LOGGER_TYPE,FINAL_PROC,FINAL_MESSAGE]);
  EXEC(`--** SSC-FDM-OR0012 - COMMIT REQUIRES THE APPROPRIATE SETUP TO WORK AS INTENDED **
COMMIT;`);
$$;
Copy

이 변환된 SQL 에서는, Snowflake SQL 에 새로운 언어(JavaScript)가 내장되어 있음을 알 수 있습니다. 이 설명서에는 많은 주목할 만한 점이 있지만, 이 문서에는 이 유형의 변환을 이해하는 데 필요한 모든 필수 요소가 포함되어 있습니다.

// ... Necessary SnowConvert Helpers are inserted here ... 이 명시된 라인에는 실제로 SnowConvert JavaScript Helpers 가 있습니다. 길이가 길 수 있으므로 이 첫 번째 예제에서는 제거했습니다.

완료되었습니다! Snowflake SnowConvert 는 데이터 플랫폼 변경으로 인한 고통과 좌절을 덜어줍니다. 다음 페이지에서 Oracle용 SnowConvert 시작하기에 대해 자세히 알아보십시오.