上下文函数

此系列函数允许收集有关执行语句的上下文的信息。这些函数在每个语句中最多计算一次。

本主题内容:

函数列表

子类别

函数

备注

一般上下文

CURRENT_CLIENT

CURRENT_DATE

CURRENT_IP_ADDRESS

CURRENT_REGION

CURRENT_TIME

CURRENT_TIMESTAMP

CURRENT_VERSION

GETDATE

CURRENT_TIMESTAMP 的别名。

LOCALTIME

CURRENT_TIME 的别名。

LOCALTIMESTAMP

CURRENT_TIMESTAMP 的别名。

SYSDATE

SYSTIMESTAMP

会话上下文

ALL_USER_NAMES

CURRENT_ACCOUNT

返回账户定位器。

CURRENT_ACCOUNT_NAME

返回账户名称。

CURRENT_ORGANIZATION_NAME

CURRENT_ROLE

CURRENT_AVAILABLE_ROLES

CURRENT_SECONDARY_ROLES

CURRENT_SESSION

CURRENT_STATEMENT

CURRENT_TRANSACTION

CURRENT_USER

GETVARIABLE

LAST_QUERY_ID

LAST_TRANSACTION

会话对象上下文

CURRENT_DATABASE

CURRENT_ROLE_TYPE

CURRENT_SCHEMA

CURRENT_SCHEMAS

CURRENT_WAREHOUSE

INVOKER_ROLE

INVOKER_SHARE

IS_APPLICATION_ROLE_IN_SESSION

IS_DATABASE_ROLE_IN_SESSION

IS_GRANTED_TO_INVOKER_ROLE

IS_INSTANCE_ROLE_IN_SESSION

IS_ROLE_IN_SESSION

POLICY_CONTEXT

警报上下文

GET_CONDITION_QUERY_UUID

使用说明

  • 上下文函数通常不需要实参。

  • 为符合 ANSI 标准,在 SQL 语句中,可以在不带括号的情况下调用以下上下文函数:

    • CURRENT_DATE

    • CURRENT_TIME

    • CURRENT_TIMESTAMP

    • CURRENT_USER

    • LOCALTIME

    • LOCALTIMESTAMP

    备注

    如果要将 Snowflake Scripting 变量 设置为调用这些函数之一的表达式(例如,my_var := <function_name>();),则必须包含圆括号。

示例

显示会话的当前仓库、数据库和架构:

SELECT CURRENT_WAREHOUSE(), CURRENT_DATABASE(), CURRENT_SCHEMA();
Copy
+---------------------+--------------------+------------------+
| CURRENT_WAREHOUSE() | CURRENT_DATABASE() | CURRENT_SCHEMA() |
|---------------------+--------------------+------------------+
| MY_WAREHOUSE        | MY_DB              | PUBLIC           |
|---------------------+--------------------+------------------+

显示当前日期、时间和时间戳(请注意,调用这些函数时不需要使用括号):

SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;
Copy
+--------------+--------------+-------------------------------+
| CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP             |
|--------------+--------------+-------------------------------|
| 2024-06-07   | 10:45:15     | 2024-06-07 10:45:15.064 -0700 |
+--------------+--------------+-------------------------------+

在 Snowflake Scripting 块中,调用不带括号的 CURRENT_DATE 函数以设置 SQL 语句中的变量:

EXECUTE IMMEDIATE
$$
DECLARE
  currdate DATE;
BEGIN
  SELECT CURRENT_DATE INTO currdate;
  RETURN currdate;
END;
$$
;
Copy
+-----------------+
| anonymous block |
|-----------------|
| 2024-06-07      |
+-----------------+

在 Snowflake Scripting 块中,尝试将变量设置为调用不带括号的 CURRENT_DATE 函数的表达式将导致错误:

EXECUTE IMMEDIATE
$$
DECLARE
  today DATE;
BEGIN
  today := CURRENT_DATE;
  RETURN today;
END;
$$
;
Copy
000904 (42000): SQL compilation error: error line 5 at position 11
invalid identifier 'CURRENT_DATE'

同一个块返回调用函数时的当前日期,并带有括号:

EXECUTE IMMEDIATE
$$
DECLARE
  today DATE;
BEGIN
  today := CURRENT_DATE();
  RETURN today;
END;
$$
;
Copy
+-----------------+
| anonymous block |
|-----------------|
| 2024-06-07      |
+-----------------+
语言: 中文