- 类别:
:doc:`/sql-reference/functions-system`(信息)
SYSTEM$REFERENCE¶
返回对对象(表、视图或函数)的 引用。当您对对象的引用执行 SQL 操作时,这些操作将使用创建引用的用户角色来执行。
备注
作为调用此函数的替代方法,您可以使用 TABLE 关键字,如果您需要创建对不打算修改的对象的引用(例如,如果您传递了存储过程将查询的表)并且希望该引用在调用范围内有效(而不是整个会话)。请参阅 使用 TABLE 关键字创建对表、视图或查询的引用。
语法¶
SYSTEM$REFERENCE('<object_type>', '<object_identifier>',
[ , '<reference_scope>' [ , '<privilege>' [ , '<privilege>' ... ] ] ] )
实参¶
必填
'object_type'
对象的类型。您可以指定以下值中的一个:
api_integration
compute_pool
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'));
请注意,不能指定 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 函数创建引用,而 |
解决方案 |
验证 |