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

Avant de nous perdre dans la magie de ces conversions de code, voici quelques termes/définitions afin que vous sachiez de quoi nous parlons lorsque nous commençons à les utiliser dans la documentation :

  • _ SQL (Structured Query Language) : _ langage standard pour stocker, manipuler et récupérer des données dans la plupart des architectures de bases de données modernes.

  • PL/SQL : _ Langage de procédure pour SQL. Il a été créé par Oracle et est toujours utilisé par Oracle comme langage de script pour les procédures stockées et les fonctions dans 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.

Conversions de code

Oracle SQL vers 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.

Exemple

Voici un exemple de conversion d’une instruction CREATE TABLE simple.

Code source :

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

Code Snowflake SQL migré :

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

Dans ce SQL converti, vous remarquerez que nous convertissons de nombreuses choses. Quelques points forts :

  • Ajout d’un schéma PUBLIC par défaut pour tous les noms de tables et de vues si l’utilisateur n’en spécifie pas

  • CREATE TABLE à CREATE OR REPLACE TABLE

  • Conversions de types de données :

    • LONG à VARCHAR

    • CLOB à VARCHAR

    • ROWID à VARCHAR

    • NVARCHAR2 à VARCHAR

    • RAW à BINARY

  • Attributs du type de données : GENERATED ALWAYS AS (COL1 * COL2) VIRTUAL à 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.

Exemple

Voici un exemple de conversion d’une CREATE PROCEDURE simple dans Oracle qui effectue une insertion dans une table utilisée pour la connexion.

Note

Cet exemple sera utilisé à la fois pour Snowflake Scripting et 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

Vers Snowflake Scripting

Snowflake Scripting fonctionne comme une extension de Snowflake SQL, il ajoute la prise en charge de la logique procédurale et cela permet de créer des procédures stockées et de répliquer des comportements et des instructions similaires à ceux d’Oracle PL/SQL.

Exemple de migration

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 est appelé comme un langage de script, et toutes les instructions internes sont converties en JavaScript. Si vous souhaitez mieux comprendre l’API JavaScript, consultez cette documentation.

Exemple de migration

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

Dans ce SQL converti, vous remarquerez que nous avons effectué une conversion vers un nouveau langage (JavaScript) intégrée à Snowflake SQL. Il y a plus que quelques points forts, mais il suffit de dire que cette documentation contient tous les éléments essentiels pour comprendre ce type de conversion.

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.