NULL (Snowflake Scripting)

NULL 可以用作“no-op”(无操作)语句。

备注

使用 NULL 作为语句的情况比较少见。NULL 通常用作 值,而不是 语句。

作为值时,NULL 表示“无值”。有关更多信息,请参阅 维基百科关于 SQL NULL 的条目 (link removed)。

使用 半结构化数据类型)时,可能需要 区分作为 SQL 值的 NULL 和作为 JSON 值的 NULL(也称为“VARIANT NULL”)。

备注

本 Snowflake Scripting 结构仅在 Snowflake Scripting 区块 内有效。

语法

NULL;

使用说明

  • NULL 语句只能在 Snowflake Scripting 代码中执行。

  • 如果没有更高级别的处理程序,异常处理程序中的 NULL 语句可以确保代码继续执行而不是中止。

  • 分支中的 NULL 语句不执行任何操作;但是,向读者传达了代码作者明确考虑了分支将执行的条件。换句话说,NULL 表示分支条件未被忽略或意外省略。

  • 在使用 NULL 语句之前,请考虑替代方法。

    例如,假设正在编写具有异常处理程序的存储过程。在大多数存储过程中,如果每个非异常代码路径都应返回一个值,则涉及异常处理程序的每个代码路径也应返回一个值。在这种情况下,请避免执行 NULL 语句。相反,请考虑显式返回 NULL、空结果集或错误指示器。

    您还可以使用 CONTINUE 处理程序在异常块中执行语句,并继续执行紧随导致错误的语句之后的语句。有关更多信息,请参阅 处理 Snowflake Scripting 中的异常。

示例

以下代码在异常处理程序中使用 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 建议存储过程显式返回一个值,包括在异常处理程序的每个分支中。