NULL (Snowflakeスクリプト)¶
NULL は、「no-op」(操作なし)ステートメントとして使用できます。
注釈
NULL をステートメントとして使用することは一般的ではありません。NULL は通常、 ステートメント としてではなく、 値 として使用されます。
値として、 NULL は「値なし」を意味します。詳細については、 SQL NULL についてのWikipediaの記事 をご参照ください。
JSON などの 半構造化データ型 を扱う場合は、 SQL 値としての NULL と JSON 値としての NULL を区別(別称「バリアントnull」) する必要がある場合があります。
注釈
この Snowflakeスクリプト 構造は、 Snowflakeスクリプトブロック 内でのみ有効です。
構文¶
NULL;
使用上の注意¶
NULL ステートメントは、 Snowflakeスクリプト のスクリプト内でのみ実行できます。
例外ハンドラーの NULL ステートメントは、上位レベルのハンドラーがない場合に、コードが中止されるのではなく実行を継続することを保証します。
分岐内の NULL ステートメントは何もしませんが、分岐が実行される条件を明示的に考慮したことをコードの作成者から読者に伝えます。つまり、 NULL は、分岐条件が見落とされたり、誤って省略されたりしてはいないことを示しています。
NULL ステートメントを使用する前に、代替手段を検討してください。
たとえば、例外ハンドラーを持つストアドプロシージャを記述しているとします。ほとんどのストアドプロシージャでは、例外以外の各コードパスにより値を返す必要がある場合、例外ハンドラーを含む各コードパスも値を返す必要があります。その場合は、 NULL ステートメントの実行を避けます。代わりに、 NULL、空の結果セット、またはエラーインジケーターを明示的に返すことを検討してください。
例¶
次のコードでは、例外ハンドラーで NULL ステートメントを使用して、例外を確実に捕捉(呼び出し元に渡すのではなく)しますが、特定のアクションは実行しません。
CREATE PROCEDURE null_as_statement()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
BEGIN
SELECT 1 / 0;
RETURN 'If you see this, the exception was not thrown/caught properly.';
EXCEPTION
WHEN OTHER THEN
NULL;
END;
$$
;
CALL null_as_statement();
+-------------------+
| NULL_AS_STATEMENT |
|-------------------|
| NULL |
+-------------------+
注釈
CALL ステートメントによって返される NULL 値は、例外の NULL ステートメントが直接の原因ではありません。戻り値が NULL なのは、ストアドプロシージャが明示的な RETURN ステートメントを実行しなかったためです。
Snowflakeは、例外ハンドラーの各分岐を含め、ストアドプロシージャが明示的に値を返すようにすることをお勧めします。