SnowConvert AI - Oracle

What is SnowConvert AI for Oracle?

SnowConvert AI is a software that understands Oracle SQL and PL/SQL, and performs the following conversions:

SnowConvert AI Terminology

Antes de nos perdermos na mágica dessas conversões de código, aqui estão alguns termos/definições para que você saiba o que queremos dizer quando começarmos a usá-los em toda a documentação:

  • _ SQL (Structured Query Language): _ A linguagem padrão para armazenar, manipular e recuperar dados na maioria das arquiteturas modernas de banco de dados.

  • _ PL/SQL: _ Linguagem de procedimento para SQL. Foi criada pela Oracle e ainda é usada pela Oracle como a linguagem de script para procedimentos e funções armazenados no Oracle.

  • SnowConvert AI: The software that converts securely and automatically your Oracle files to the Snowflake cloud data platform.

  • Conversion rule or transformation rule: Rules that allow SnowConvert AI to convert from a portion of source code and determine the expected target code.

  • Parse: Parse or parsing is an initial process done by SnowConvert AI to understand the source code, and build up an internal data structure to process the conversion rules.

Let’s dive in to some of the code conversions that Snowflake SnowConvert AI can perform.

Conversões de código

Oracle SQL para Snowflake SQL

SnowConvert AI for Oracle takes in Oracle source code in SQL and converts the Data Definition Language (DDL), Data Manipulation Language (DML), and functions in the source code to the corresponding SQL in Snowflake SQL.

Exemplo

Aqui está um exemplo da conversão de uma instrução simples de CREATE TABLE.

O código-fonte:

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

O código do Snowflake SQL migrado:

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

Neste SQL convertido, você vê que estamos convertendo muitas coisas. Alguns destaques:

  • Adição do esquema PUBLIC por padrão para todos os nomes de tabelas e exibições se o usuário não especificar um

  • CREATETABLE para CREATEORREPLACETABLE

  • Conversões do tipo de dados:

    • LONG a VARCHAR

    • CLOB a VARCHAR

    • ROWID a VARCHAR

    • NVARCHAR2 a VARCHAR

    • RAW a BINARY

  • Atributos do tipo de dados: GENERATED ALWAYS AS (COL1 * COL2) VIRTUAL a AS (COL1 * COL2)

For more information about data types and their equivalent: Data Types. More examples can be found in the rest of the documentation.

Oracle PL/SQL

SnowConvert AI takes Oracle stored procedures and functions (PL/SQL) and converts them to either Snowflake Scripting or JavaScript embedded into Snowflake SQL. Oracle CREATE PROCEDURE and REPLACE PROCEDURE syntax is replaced by Snowflake CREATE OR REPLACE PROCEDURE syntax.

Exemplo

Aqui está um exemplo da conversão de um simples CREATE PROCEDURE no Oracle que faz uma inserção em uma tabela usada para registro.

Nota

Este exemplo será usado tanto para o Snowflake Scripting quanto para o 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

Para o Snowflake Scripting

O Snowflake Scripting funciona como uma extensão do Snowflake SQL, adicionando suporte à lógica processual, o que nos permite criar procedimentos armazenados e replicar comportamentos e instruções semelhantes do Oracle PL/SQL.

Exemplo de migração

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

Para JavaScript

JavaScript é chamado como uma linguagem de script, todas as instruções internas são convertidas para JavaScript. Se quiser entender melhor o JavaScript API, consulte esta documentação.

Exemplo de migração

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

Neste SQL convertido, você notará que convertemos para uma nova linguagem (JavaScript) incorporada ao Snowflake SQL. Há mais do que alguns destaques, mas basta dizer que essa documentação tem todos os elementos essenciais para entender esse tipo de conversão.

The line that states // ... Necessary SnowConvert AI Helpers are inserted here ... will actually have the SnowConvert AI JavaScript Helpers. They can be lengthy, so they are removed from this first example.

And that’s it! Snowflake SnowConvert AI takes the pain and frustration out of changing data platforms. Learn more about getting started with SnowConvert AI for Oracle on the next page.