UDF was transformed to Snowflake procedure, calling procedures inside a query is not supported.
Severity
High
Description
This error is added when a call to a UDF (user defined function) is found inside a query. Oracle UDFs and UDFs inside packages and some SQL Server UDFs, are being transformed to Snowflake Stored Procedures, which can not be called from a query.
The function is transformed to a Stored procedure to maintain functional equivalence and the function call is transformed to an empty Snowflake UDF function.
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **CREATEORREPLACEPROCEDURE PURCHASING.FOO ()RETURNSVARCHARLANGUAGESQLCOMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"transact"}}'
EXECUTEASCALLERAS$$DECLARE I INT :=0; P INT;BEGINSelectCOUNT(*)INTO :PFROM PURCHASING.VENDOR;WHILE (:P <1000) LOOP I := :I +1; P := :P + :I;ENDLOOP;IF ((:I =6)) THENRETURN1;ENDIF;RETURN :P;END;$$;SELECT PURCHASING.FOO() !!!RESOLVE EWI!!! /*** SSC-EWI-0067 - UDF WAS TRANSFORMED TO SNOWFLAKE PROCEDURE, CALLING PROCEDURES INSIDE QUERIES IS NOT SUPPORTED ***/!!! AS RESULT;
Oracle:
IN -> Oracle_01.sql
CREATE OR REPLACEFUNCTIONFUN1(PAR1 VARCHAR)RETURNVARCHARIS VAR1 VARCHAR(20); VAR2 VARCHAR(20);BEGINSELECT COL1 INTO VAR1 FROM TABLE1 where col1 =1; VAR2 := PAR1 || VAR1;RETURN VAR2;END;/SELECT FUN1(COL2) FROM TABLE1;
OUT -> Oracle_01.sql
--** SSC-FDM-0029 - USER DEFINED FUNCTION WAS TRANSFORMED TO SNOWFLAKE PROCEDURE **CREATEORREPLACEPROCEDURE FUN1(PAR1 VARCHAR)RETURNSVARCHARLANGUAGESQLCOMMENT = '{"origin":"sf_sc","name":"snowconvert","version":{"major":1, "minor":0},"attributes":{"component":"oracle"}}'
EXECUTEASCALLERAS$$DECLARE VAR1 VARCHAR(20); VAR2 VARCHAR(20);BEGINSELECT COL1 INTO :VAR1FROM TABLE1where col1 =1; VAR2 := NVL(:PAR1 :: STRING, '') || NVL(:VAR1 :: STRING, '');RETURN :VAR2;END;$$;--** SSC-FDM-0007 - MISSING DEPENDENT OBJECT "TABLE1" **SELECT !!!RESOLVE EWI!!! /*** SSC-EWI-0067 - UDF WAS TRANSFORMED TO SNOWFLAKE PROCEDURE, CALLING PROCEDURES INSIDE QUERIES IS NOT SUPPORTED ***/!!! FUN1(COL2) FROM
TABLE1;
Recommendations
The source code may need to be restructured to fit with the Snowflake user-defined functions approach.