Procedures

Translation reference to convert Teradata PROCEDURE statement to Snowflake

Important Notice: Migration of Documentation Website

Please be advised that our documentation website is currently undergoing a migration to a new platform. To ensure you have access to the most up-to-date information, we kindly request that you visit our new documentation website located at:

Official Snowflake Snowconvert Documentation

For any immediate assistance or if you encounter any issues, please contact our support team at [email protected].

Thank you for your understanding.

Description

Teradata's PROCEDURE statement is translated to Snowflake PROCEDURE syntax.

For more information on Teradata PROCEDURE, click here.

Sample Source Patterns

Create Procedure Transformation

SnowConvert Helpers Code was removed from the example. You can find them here.

Some parts of the output code are omitted for clarity reasons.

SnowConvert procedure helpers region

All procedures contain a region called SnowConvert Helpers code, these are a set of variables and functions that help to emulate some Teradata functionality that is not native in JavaScript. For simplicity in the procedures samples code this region will not be shown. Some helpers are added always like EXEC and some others like FETCH, INTO, etc. are added on demand.

The region helpers code is as follows:

Teradata

Snowflake

Note: The stored procedure's body in Snowflake is executed as javascript functions.

If

The transformation for the IF statement is:

Teradata

Snowflake

Case

The transformation for the Case statement is:

Teradata

Snowflake

Cursor Declare, OPEN, FETCH and CLOSE

The transformation for cursor statements is:

Teradata

Snowflake

While

The transformation for while statement is:

Teradata

Snowflake

Security

The transformation for security statements is:

Teradata
Snowflake

SQL SECURITY CREATOR

EXECUTE AS OWNER

SQL SECURITY INVOKER

EXECUTE AS CALLER

SQL SECURITY DEFINER

EXECUTE AS OWNER

FOR-CURSOR-FOR loop

The transformation for FOR-CURSOR-FOR loop is:

Teradata

Snowflake

Note: The FOR loop present in the Teradata procedure is transformed to a FOR block in javascript that emulates its functionality.

Procedure parameters and variables referenced inside statements

The transformation for the procedure parameters and variables that are referenced inside the statements of the procedure is:

Teradata

Snowflake

Note: Whenever a procedure parameter or a variable declared inside the procedure is referenced inside a Teradata statement that has to be converted, this reference is escaped from the resulting text to preserve the original reference's functionality.

Leave

In Javascript, it's possible to use break with an additional parameter, thus emulating the behavior of a Teradata LEAVE jump.

Labels can also be emulated by using Javascript Labeled Statements.

The transformation for LEAVE statement is:

Teradata

Snowflake

Getting Results from Procedures

Description of the translation

In Teradata, there are two ways to return data from a procedure. The first is through output parameters and the second through Dynamic Result Sets and Cursors. Both are shown in the following example. Each important point is explained below.

Example of returning data from a Stored Procedure

Teradata

Snowflake

In this converted SQL, there are several conversions that take place:

  • The DYNAMIC RESULT SETS 2 definition is converted to a DYNAMIC_RESULTS variable.

  • When a cursor with an WITH RETURNattribute is opened (and therefore a query is executed), its query ID is stored in the_OUTQUERIEScollection in order to be later returned. The query id is obtained by thegetQueryId()function provided in the JavaScript API for Snowflake stored procedures.

  • Only the first k-query-IDs are stored in the collection, where k is the value of theDYNAMIC_RESULTSvariable. This is done to emulate Teradata's behavior, which only returns the first k-opened-cursors, even if more are opened in the stored procedure.

  • The combination of DECLARE CURSOR WITH RETURN with PREPARE is translated to:

  • The output parameters are supported via the return statement of the procedure. An array is created containing the value of each output parameter and the_OUTQUERIEScollection. ThePROCRESULTSfunction deals with the creation and filling of this array. See PROCRESULTS() helper for more information.

Example of getting data from a Stored Procedure

If the output parameters and the query IDs are returned from a procedure, a second one could call the first one to get these values, as shown below:

Teradata

Snowflake

  • The value of theP1argument fromProcedure1is returned and stored in theXvariable.

  • The_OUTQUERIESreturned fromProcedure1are stored in theresultsetvariable.

This behavior also applies to the INOUT parameters.

Known Issues

No issues were found.

  1. SSC-EWI-0022: One or more identifiers in this statement were considered parameters by default.

  2. SSC-EWI-0023: Performance Review - A loop contains an insert, delete, or update statement.

  3. SSC-EWI-0026: The variable may require a cast to date, time, or timestamp.

  4. SSC-FDM-TD0001: This message is shown when SnowConvert finds a data type BLOB.

Last updated