SnowConvert: Oracle

O que é o SnowConvert para Oracle?

O SnowConvert é um software que entende o Oracle SQL e PL/SQL e realiza as seguintes conversões:

Terminologia do SnowConvert

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 _ : O software que converte de forma segura e automática seus arquivos Oracle para a plataforma de dados em nuvem da Snowflake.

  • _ Regra de conversão ou regra de transformação: _ Regras que permitem que o SnowConvert converta a partir de uma parte do código-fonte e determine o código-alvo esperado.

  • _ Análise: _ É um processo inicial realizado pelo SnowConvert para entender o código-fonte e criar uma estrutura de dados interna para processar as regras de conversão.

Vamos nos aprofundar em algumas das conversões de código que o Snowflake SnowConvert pode realizar.

Conversões de código

Oracle SQL para Snowflake SQL

SnowConvert para Oracle recebe o código-fonte Oracle em SQL e converte a Linguagem de Definição de Dados (DDL), a Linguagem de Manipulação de Dados (DML) e as funções no código-fonte para o SQL correspondente no 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)

Para obter mais informações sobre tipos de dados e seus equivalentes: Tipos de dados. Mais exemplos podem ser encontrados no restante da documentação.

Oracle PL/SQL

O SnowConvert pega os procedimentos e funções armazenados no Oracle (PL/SQL) e os converte em Snowflake Scripting ou JavaScript incorporado ao Snowflake SQL. A sintaxe do Oracle CREATE PROCEDURE e REPLACE PROCEDURE foi substituída pela sintaxe do Snowflake CREATE OR REPLACE PROCEDURE.

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

A linha que diz //... Necessary SnowConvert Helpers are inserted here ... terá de fato os Helpers do SnowConvert JavaScript. Elas podem ser longas, por isso foram removidas deste primeiro exemplo.

E é isso! O Snowflake SnowConvert elimina a dificuldade de mudar as plataformas de dados. Saiba mais sobre como começar a usar o SnowConvert para Oracle na próxima página.