NULL (Snowflake Scripting)¶
NULL 可以用作“no-op”(无操作)语句。
备注
使用 NULL 作为语句并不常见。NULL 通常用作 值,而不是 语句。
作为值,NULL 表示“没有值”。有关更多信息,请参阅 关于 SQL NULL 的维基百科文章 (link removed)。
使用 半结构化数据类型 (如 JSON)时,可能需要 区分作为 SQL 值的 NULL 和作为 JSON 值的 NULL (也称为“变体 NULL”)。
备注
本 Snowflake Scripting 结构仅在 Snowflake Scripting 区块 内有效。
语法¶
NULL;
使用说明¶
NULL 语句只能在 Snowflake Scripting 中执行。
如果没有更高级别的处理程序,异常处理程序中的 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 建议存储过程显式返回一个值,包括在异常处理程序的每个分支中。