This article is about the current transformation of the default parameters and how their functionality is being emulated.
Description
A default parameter is a parameter that has a value in case an argument is not passed in the procedure or function call. Since Snowflake doesn't support default parameters, SnowConvert inserts the default value in the procedure or function call.
In the declaration, the DEFAULT VALUE clause of the parameter is removed. Both syntaxes, the := symbol and the DEFAULT clause, are supported.
CREATE OR REPLACETABLEPUBLIC.TABLE1 ( COL1 NUMBER (38,18) /*** MSC-WARNING - MSCEWI1066 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE ***/, COL2 NUMBER (38,18) /*** MSC-WARNING - MSCEWI1066 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE ***/);CREATE OR REPLACETABLEPUBLIC.TABLE2 ( COL1 NUMBER (38,18) /*** MSC-WARNING - MSCEWI1066 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE ***/, COL2 NUMBER (38,18) /*** MSC-WARNING - MSCEWI1066 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE ***/, COL3 NUMBER (38,18) /*** MSC-WARNING - MSCEWI1066 - NUMBER TYPE COLUMN MAY NOT BEHAVE SIMILARLY IN SNOWFLAKE ***/);
Default parameter declaration
Oracle
CREATEORREPLACEPROCEDURE PROC_WITH_DEFAULT_PARAMS1 (param1 NUMBER, param2 NUMBERdefault TO_NUMBER(1))ASBEGININSERT INTO TABLE1 (COL1, COL2) VALUES(param1, param2);END;CREATEORREPLACEPROCEDURE PROC_WITH_DEFAULT_PARAMS2 (param1 NUMBERdefault1, param2 NUMBERdefault2)ASBEGININSERT INTO TABLE1 (COL1, COL2) VALUES(param1, param2);END;CREATE OR REPLACE PROCEDURE PROCEDURE_WITH_DEAFAULT_PARAMS3 (param1 NUMBER DEFAULT 100, param2 NUMBER, param3 NUMBER DEFAULT 1000)
ISBEGININSERT INTO TABLE2(COL1, COL2, COL3) VALUES (param1, param2, param3);END;
Snowflake Scripting
CREATE OR REPLACE PROCEDURE PUBLIC.PROC_WITH_DEFAULT_PARAMS1 (param1 NUMBER (38,18), param2 NUMBER (38,18) /*** MSC-WARNING - MSCEWI1089 - The default value TO_NUMBER(1) is not supported by Snowflake. ***/)
RETURNSVARCHARLANGUAGESQLEXECUTEASCALLERAS$$BEGININSERT INTO PUBLIC.TABLE1(COL1, COL2) VALUES(:param1, :param2);END;$$;CREATE OR REPLACE PROCEDURE PUBLIC.PROC_WITH_DEFAULT_PARAMS2 (param1 NUMBER (38,18) /*** MSC-WARNING - MSCEWI1089 - The default value 1 is not supported by Snowflake. ***/, param2 NUMBER (38,18) /*** MSC-WARNING - MSCEWI1089 - The default value 2 is not supported by Snowflake. ***/)
RETURNSVARCHARLANGUAGESQLEXECUTEASCALLERAS$$BEGININSERT INTO PUBLIC.TABLE1(COL1, COL2) VALUES(:param1, :param2);END;$$;CREATE OR REPLACE PROCEDURE PUBLIC.PROCEDURE_WITH_DEAFAULT_PARAMS3 (param1 NUMBER(38, 18) /*** MSC-WARNING - MSCEWI1089 - The default value 100 is not supported by Snowflake. ***/, param2 NUMBER(38, 18), param3 NUMBER(38, 18) /*** MSC-WARNING - MSCEWI1089 - The default value 1000 is not supported by Snowflake. ***/)
RETURNSVARCHARLANGUAGESQLEXECUTEASCALLERAS$$BEGININSERT INTO PUBLIC.TABLE2(COL1, COL2, COL3) VALUES (:param1, :param2, :param3);END;$$;
In order to check that the functionality is being emulated correctly the following query is going to execute the procedure and a SELECT from the table mentioned before.
CREATEORREPLACEPROCEDURE PUBLIC.PROC_WITH_DEFAULT_CALLS2 ()RETURNSVARCHARLANGUAGESQLEXECUTEASCALLERAS$$BEGINCALL PUBLIC.PROCEDURE_WITH_DEAFAULT_PARAMS3(10, 20, 30);/*** MSC-WARNING - MSCEWI1079 - PARAMETER NAMES WERE REMOVED FROM CALL, CHECK PARAMETER ORDER ***/CALL PUBLIC.PROCEDURE_WITH_DEAFAULT_PARAMS3(10, 20, 30);/*** MSC-WARNING - MSCEWI1079 - PARAMETER NAMES WERE REMOVED FROM CALL, CHECK PARAMETER ORDER ***/CALL PUBLIC.PROCEDURE_WITH_DEAFAULT_PARAMS3(20, 30, 10);/*** MSC-WARNING - MSCEWI1079 - PARAMETER NAMES WERE REMOVED FROM CALL, CHECK PARAMETER ORDER ***/ CALL PUBLIC.PROCEDURE_WITH_DEAFAULT_PARAMS3(100 /*** MSC-WARNING - MSCEWI1090 - Default value added ***/, 30, 10);
/*** MSC-WARNING - MSCEWI1079 - PARAMETER NAMES WERE REMOVED FROM CALL, CHECK PARAMETER ORDER ***/ CALL PUBLIC.PROCEDURE_WITH_DEAFAULT_PARAMS3(100 /*** MSC-WARNING - MSCEWI1090 - Default value added ***/, 10, 30);
/*** MSC-WARNING - MSCEWI1079 - PARAMETER NAMES WERE REMOVED FROM CALL, CHECK PARAMETER ORDER ***/ CALL PUBLIC.PROCEDURE_WITH_DEAFAULT_PARAMS3(100 /*** MSC-WARNING - MSCEWI1090 - Default value added ***/, 10, 1000 /*** MSC-WARNING - MSCEWI1090 - Default value added ***/);
END;$$;
In order to check that the functionality is being emulated correctly the following query is going to execute the procedure and a SELECT from the table mentioned before.