SnowConvert AI - Oracle - CREATE FUNCTION¶
OracleのSnowflake Snowスクリプトへの関数作成
説明¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
ストアド関数 (ユーザー関数 または ユーザー定義関数 とも呼ばれます)は、名前で呼び出すことができる一連の PL/SQL ステートメントです。ストアド関数はプロシージャとよく似ていますが、関数は呼び出された環境に値を返すという点が異なります。ユーザー関数は、 SQL 式の一部として使用できます。
呼び出し仕様 は、Javaメソッドまたは第三世代言語(3GL)ルーチンを宣言し、 PL/SQL から呼び出せるようにします。このようなメソッドやルーチンを呼び出すには、
CALLSQL ステートメントを使用することもできます。呼び出し仕様は、呼び出しが行われたときにどのJavaメソッド、またはどの共有ライブラリ内のどの名前付き関数を呼び出すかをOracleデータベースに伝えます。また、引数と戻り値の型変換もデータベースに指示します。Oracle SQL 言語リファレンス関数の作成。
Oracle構文¶
For more information, see the Oracle CREATE FUNCTION documentation.
Oracleの関数作成の構文¶
Snowflake構文¶
Snowflakeでは、ユーザー定義関数で3つの異なる言語を使用できます。
SQL
JavaScript
Java
今のところ、 SnowConvert AI はターゲット言語として SQL と JavaScript のみをサポートします。
For more information, see the Snowflake UDF overview.
SQL¶
注釈
SQL ユーザー定義関数は、本文として1つのクエリしかサポートしていません。データベースからの読み取りは可能ですが、書き込みや変更はできません(スカラー SQL UDFs)。
JavaScript¶
注釈
JavaScript ユーザー定義関数は、本文中に複数のステートメントを記述することができますが、データベースへのクエリを実行することはできません。(スカラー JavaScript UDFs)。
サンプルソースパターン¶
サンプル補助データ¶
注釈
このコードは例の理解を深めるために実行されました。
Oracle¶
Snowflake¶
既知の問題¶
問題は見つかりませんでした。
return変数のカーソル¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
このパターンは、Oracle PL/SQL で、カーソルを使用して単一の値をフェッチし、それを返す関数を定義します。
コンポーネント:
関数宣言:
CREATE FUNCTION functionName(parameters) RETURN returnType入力パラメーターと戻り値の型で関数を宣言します。
変数の宣言:
return変数を含む変数を宣言します。
カーソル宣言:
CURSOR cursorName IS SELECT singleColumn FROM ... WHERE ... [AND col1 = localVar1];テーブルから1つの列を選択するためのカーソルを定義し、オプションのフィルター条件を指定します。
BEGIN-END ブロック:
変数の割り当て。
カーソルを開きます。
結果をreturn変数に取得します。
カーソルを閉じます。
取得した値を返します。
この場合、変数は共通テーブル式(CTE)に変換されます。カーソル内のクエリと同様に、 FETCH CURSOR の動作をシミュレートするために、 FETCH FIRST 1 ROW ONLY 句が追加されています。
RETURN ステートメントが最後の選択に変換されます。
クエリ¶
Oracle¶
Snowflake¶
結果¶
FUNC1() |
|---|
2004-05-03. |
Oracle¶
Snowflake¶
結果¶
FUNC1() |
|---|
2004-05-03. |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-FDM-OR0042:日付型をタイムスタンプに変換すると異なる動作をします。
SSC-EWI-0073: 機能等価性レビュー保留中。
IF ステートメントを含むカーソル¶
注釈
わかりやすくするため、出力コードの一部を省略しています。
このパターンは、 IF ステートメントに基づいて、条件付きでカーソルを使用して値をフェッチして返す関数を定義します。
コンポーネント:
関数宣言:
CREATE FUNCTION functionName(parameters) RETURN returnType入力パラメーターと戻り値の型で関数を宣言します。
カーソル宣言:
CURSOR cursorName IS SELECT singleColumn FROM ... WHERE ... [AND col1 = localVar1];テーブルから1つの列を選択するためのカーソルを定義し、オプションのフィルター条件を指定します。
変数宣言:
return変数を含む変数を宣言します。
IF ステートメントを含む BEGIN-END ブロック:
変数の割り当て。
条件がtrueかどうかをチェックします。
trueの場合、カーソルを開き、return変数に結果をフェッチし、カーソルを閉じ、フェッチされた値を返します。(カーソルは
ELSEブロックでも開くことができ、同じ条件を満たす必要があります)ELSEブロックはオプションです。存在する場合は、割り当てまたはRETURNステートメントになる単一のステートメントのみを含める必要があります。
変数は共通テーブル式(CTE)に変換されます。カーソル内のクエリと同様に、 FETCH CURSOR の動作をシミュレートするために、 FETCH FIRST 1 ROW ONLY 句が追加されています。
IF/ELSE ステートメントは、クエリ内で条件式を使用できるように、select内でCASE EXPRESSIONを使用して処理できます。RETURN ステートメントは、最終的なselectに変換されます。
クエリ¶
Oracle¶
Snowflake¶
結果¶
FUNC2(0) |
|---|
NULL |
FUNC2(1) |
|---|
33 |
Oracle¶
Snowflake¶
結果¶
FUNC2(0) |
|---|
33 |
FUNC2(1) |
|---|
2 |
Oracle¶
Snowflake¶
結果¶
FUNC2(0) |
|---|
0 |
FUNC2(1) |
|---|
33 |
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
関連する EWIs なし。
Multiple IF statement¶
このパターンは、ローカル変数に対する条件ステートメントを使用する関数を定義します。
コンポーネント:
関数宣言:
CREATE FUNCTION functionName(parameters) RETURN returnType入力パラメーターと戻り値の型で関数を宣言します。
変数宣言:
return変数を含む変数を宣言します。
IF ステートメントを含む BEGIN-END ブロック:
条件がtrueかどうかをチェックします。
各ケースは、同じ変数に値を割り当てるために使用されます。
変換:¶
DECLARE SECTION : variables with default expression are moved to a common table expression.
IF/ELSE ステートメントは、クエリ内で条件式を使用できるように、select内でCASE EXPRESSIONを使用して処理できます。
RETURN ステートメントが最後の選択に変換されます。
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
Oracle¶
Snowflake¶
既知の問題¶
問題は見つかりませんでした。
関連 EWIs¶
SSC-FDM-OR0042:日付型をタイムスタンプに変換すると異なる動作をします。
SSC-EWI-0073: 機能等価性レビュー保留中。
SSC-EWI-OR0036:型解決の問題で、文字列と日付の間の算術演算が正しく動作しないことがあります。
Snowflakeスクリプト UDF ( SCALAR )¶
Translation reference for Oracle User Defined Functions to Snowflake Scripting UDFs
注釈
わかりやすくするため、出力コードの一部を省略しています。
説明¶
SnowConvert は、Oracle PL/SQL ユーザー定義関数が特定の条件を満たす場合、 **Snowflakeスクリプト UDFs ** ( SnowScript UDFs )への直接の翻訳をサポートするようになりました。
**Snowflakeスクリプト UDFs **は、Snowflakeのプロシージャ言語構文(Snowscript)を使用して、 SQL UDF 本文内に記述されるユーザー定義関数です。データベースへのアクセスを必要とせず、変数、ループ、条件付きロジック、例外処理をサポートしています。
関数が SnowScript UDFs になる場合¶
SnowConvert は、各Oracle関数を分析し、適切なSnowflakeターゲットを自動的に決定します。関数は、データアクセス操作のないプロシージャロジックのみを含む場合に、 SnowScript UDF になります。
サンプルソースパターン¶
単純な計算関数¶
データのクエリを行わずに計算を行う基本的な関数。
Oracle¶
結果¶
CALCULATETAX(1000, 15) |
|---|
150 |
Snowflake( SnowScript UDF )¶
結果¶
CALCULATETAX(1000, 15) |
|---|
150 |
IF/ELSIF/ELSE ロジックを持つ関数¶
ビジネスロジックに条件付きステートメントを使用する関数。
Oracle¶
結果¶
GETSHIPPINGCOST(75, 25) |
|---|
30 |
Snowflake( SnowScript UDF )¶
結果¶
GETSHIPPINGCOST(75, 25) |
|---|
30 |
FOR ループを持つ関数¶
反復計算にループを使用する関数。
Oracle¶
結果¶
CALCULATECOMPOUNDINTEREST(1000, 5, 3) |
|---|
1157.63 |
Snowflake( SnowScript UDF )¶
結果¶
CALCULATECOMPOUNDINTEREST(1000, 5, 3) |
|---|
1157.63 |
CASE および DECODE ロジック¶
CASE 式と DECODE を使用して分類を行う関数。
Oracle¶
結果¶
GETCUSTOMERTIER(3000, 6) |
|---|
GOLD |
Snowflake( SnowScript UDF )¶
結果¶
GETCUSTOMERTIER(3000, 6) |
|---|
GOLD |
Select Into variable assignment¶
Functions using simple select into for variable assignment.
Oracle¶
結果¶
CALCULATEPRICE(100, 3) |
|---|
285 |
Snowflake( SnowScript UDF )¶
結果¶
CALCULATEPRICE(100, 3) |
|---|
285 |
既知の問題¶
警告
SnowConvert AI will not translate UDFs containing the following elements into SnowScripting UDFs, as these features are unsupported in SnowScripting UDFs:
データベーステーブルにアクセスする
カーソルを使用する
他の UDFs を呼び出す
集約またはウィンドウ関数を含む
DML 操作を実行する( INSERT/UPDATE/DELETE )
結果セットを返す
関連 EWIs¶
SSC-EWI-0067: UDF がSnowflakeプロシージャに変換されました。クエリ内でのプロシージャの呼び出しはサポートされていません。
SSC-EWI-0068:ユーザー定義関数がSnowflakeプロシージャに変換されました。
SSC-EWI-0073: 機能等価性レビュー保留中。
SSC-FDM-OR0042:日付型をタイムスタンプに変換すると異なる動作をします。