NULL (Snowflake Scripting)

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

备注

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

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

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

备注

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

语法

NULL;
Copy

使用说明

  • 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;
$$
;
Copy

调用存储过程:

CALL null_as_statement();
Copy
+-------------------+
| NULL_AS_STATEMENT |
|-------------------|
| NULL              |
+-------------------+

备注

CALL 语句返回的 NULL 值不是由异常中的 NULL 语句直接导致的;相反,返回值为 NULL,因为存储过程没有执行显式 RETURN 语句。

Snowflake 建议存储过程显式返回一个值,包括在异常处理程序的每个分支中。