类别:

:doc:`/sql-reference/functions-system`(信息)

SYSTEM$REFERENCE

返回对表、视图或函数这些对象的 引用。当您对对象的引用执行 SQL 操作时,这些操作将使用创建引用的用户的角色执行。

另请参阅:

SYSTEM$QUERY_REFERENCE

语法

SYSTEM$REFERENCE('<object_type>', '<object_identifier>',
  [ , <reference_scope> [ , '<privilege>' [ , '<privilege>' ... ] ] ] )
Copy

实参

必填

object_type

对象的类型。您可以指定以下值中的一个:

  • api_integration

  • database

  • external_table

  • function

  • materialized_view

  • pipe

  • procedure

  • schema

  • table

  • task

  • view

  • warehouse

object_identifier

对象的标识符。如果标识符包含空格或特殊字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写。

有关标识符的更多详细信息,请参阅 标识符要求

可选

reference_scope

指定引用的范围。

如果为 CALL 或省略,则指定引用在创建引用的上下文中是有效的。请参阅 指定引用范围

如果是 SESSION,则指定引用应在会话的持续时间内有效。

如果是 PERSISTENT,则指定引用在删除对象之前应该是有效的。请参阅 持久引用

注意:如果需要指定 privilege 实参,则该 reference_scope 实参是必需的。

有效值:

  • CALL

  • SESSION

  • PERSISTENT

默认值:CALL

privilege

对对象执行 SQL 操作所需的其他 权限

例如,假设要将表的引用传递给将行插入到该表中的存储过程。指定 'INSERT' 以将该表的 INSERT 权限授予存储过程。

有关支持的对象和权限的列表,请参阅 支持的引用对象类型和权限

若要指定多个其他权限,请将每个权限名称作为附加实参传递给函数。例如,要授予 INSERT、UPDATE和 TRUNCATE 权限,请执行以下操作:

CALL myprocedure( SYSTEM$REFERENCE('TABLE', 'table_with_different_owner', 'SESSION', 'INSERT'. 'UPDATE', 'TRUNCATE'));
Copy

请注意,不能指定 OWNERSHIP 或 ALL 作为权限。

返回

可以用作标识符的引用的序列化字符串表示形式。

使用说明

object_type 实参必须与 object_identifier 指定的对象的类型相匹配。

故障排除

以下场景可以帮助您解决可能发生的问题。

错误

505028 (42601): Object type <object_type> does not match the specified type <type_of_the_specified_object> for reference creation

原因

如果尝试使用 SYSTEM$REFERENCE 函数创建引用,而 object_type 实参与 object_identifier 指定的对象类型不匹配,则该函数将失败。例如,如果 object_type 实参为 TABLE,但 object_identifier 解析为 TABLE 以外的对象类型(例如 VIEW),则函数将失败。

解决方案

验证 object_identifier 指定的对象的类型是否与 object_type 实参相匹配。有关支持的对象类型的列表,请参阅 支持的引用对象类型和权限

示例

请参阅 简单示例

语言: 中文