The Following Assignment Statement is Not Supported by Snowflake Scripting
Some parts in the output code are omitted for clarity reasons.
Severity
Medium
Description
Some Oracle variable types do not have a direct translation in Snowflake. Currently, transformation for cursor, collection, record, and user-defined type variables; as well as placeholders, objects, and output parameters are not supported by Snow Scripting.
Changing these variables to Snowflake semi-structured data types could help as a workaround in some scenarios.
Example Code
Input Code:
IN -> Oracle_01.sql
CREATE OR REPLACE PROCEDURE pinvalidassign(out_parameter INOUTNUMBER)ASrecord_variable employees%ROWTYPE;TYPE cursor_type IS REF CURSOR;cursor1 cursor_type;cursor2 SYS_REFCURSOR;TYPE collection_type ISTABLEOFNUMBERINDEX BYVARCHAR(64);collection_variable collection_type;BEGIN--Record Example record_variable.last_name :='Ortiz';--Cursor Example cursor1 := cursor2;--Collection collection_variable('Test') :=5;--Out Parameter out_parameter :=123;END;
Output Code:
OUT -> Oracle_01.sql
CREATEORREPLACEPROCEDURE pinvalidassign (out_parameter NUMBER(38, 18))RETURNS VARIANTLANGUAGESQLCOMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTEASCALLERAS$$DECLARE record_variable OBJECT !!!RESOLVE EWI!!! /*** SSC-EWI-0036 - ROWTYPE DATA TYPE CONVERTED TO OBJECT ***/!!! := OBJECT_CONSTRUCT();
-- !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL REF CURSOR TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
-- TYPE cursor_type IS REF CURSOR; cursor1_res RESULTSET; cursor2_res RESULTSET;-- !!!RESOLVE EWI!!! /*** SSC-EWI-0058 - FUNCTIONALITY FOR 'PL COLLECTION TYPE DEFINITION' IS NOT CURRENTLY SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
-- TYPE collection_type IS TABLE OF NUMBER INDEX BY VARCHAR(64); collection_variable VARIANT !!!RESOLVE EWI!!! /*** SSC-EWI-0062 - CUSTOM TYPE 'collection_type' USAGE CHANGED TO VARIANT ***/!!!;
BEGIN--Record Example record_variable := OBJECT_INSERT(record_variable, 'LAST_NAME', 'Ortiz', true);--Cursor Example !!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
cursor1 := :cursor2;--Collection !!!RESOLVE EWI!!! /*** SSC-EWI-OR0108 - THE FOLLOWING ASSIGNMENT STATEMENT IS NOT SUPPORTED BY SNOWFLAKE SCRIPTING ***/!!!
collection_variable('Test') :=5;--Out Parameter out_parameter :=123;RETURN out_parameter;END;$$;
Recommendations
Change the variable data type or try to simulate the behavior using Snowflake semi-structured data types.