- Categorias:
Funções do sistema (Informação)
SYSTEM$REFERENCE¶
Retorna uma referência a um objeto (uma tabela, exibição ou função). Quando você executa ações de SQL em uma referência a um objeto, as ações são executadas usando a função do usuário que criou a referência.
Nota
Como alternativa para chamar esta função, você pode usar a palavra-chave TABLE, se você precisar criar uma referência a um objeto que não planeja modificar (por exemplo, se estiver passando uma tabela que o procedimento armazenado consultará) e quiser que essa referência seja válida para o escopo da chamada (em vez de para a sessão inteira). Consulte Uso da palavra-chave TABLE para criar uma referência a uma tabela, exibição ou consulta.
- Consulte também:
Sintaxe¶
SYSTEM$REFERENCE('<object_type>', '<object_identifier>',
[ , '<reference_scope>' [ , '<privilege>' [ , '<privilege>' ... ] ] ] )
Argumentos¶
Obrigatório
'object_type'
Tipo do objeto. Especifique um dos seguintes valores:
api_integration
compute_pool
database
external_table
function
materialized_view
pipe
procedure
schema
table
task
view
warehouse
'object_identifier'
Identificador do objeto. Se o identificador contiver espaços ou caracteres especiais, toda a cadeia de caracteres deverá ser delimitada por aspas duplas. Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.
Para obter mais detalhes sobre os identificadores de, consulte Requisitos para identificadores.
Opcional
'reference_scope'
Especifica o escopo da referência.
Se for
'CALL'
ou omitido, especifica que a referência é válida dentro do contexto em que foi criada. Consulte Especificação do escopo da referência.Se
'SESSION'
, especifica que a referência deve ser válida durante a sessão.Se
'PERSISTENT'
, especifica que a referência deve ser válida até que o objeto seja descartado. Consulte referências persistentes.Nota: se você precisar especificar o argumento
'privilege'
, o argumento'reference_scope'
será necessário.Valores válidos:
'CALL'
'SESSION'
'PERSISTENT'
Valor padrão:
'CALL'
'privilege'
Privilégio adicional necessário para realizar uma ação de SQL no objeto.
Por exemplo, suponha que você esteja passando a referência de uma tabela para um procedimento armazenado que insere linhas nessa tabela. Especifique
'INSERT'
para conferir o privilégio INSERT nessa tabela para o procedimento armazenado.Para obter uma lista de objetos e privilégios compatíveis, consulte Tipos de objetos e privilégios suportados para referências.
Para especificar mais de um privilégio adicional, passe cada nome de privilégio como um argumento adicional para a função. Por exemplo, para conferir os privilégios INSERT, UPDATE e TRUNCATE:
CALL myprocedure( SYSTEM$REFERENCE('TABLE', 'table_with_different_owner', 'SESSION', 'INSERT'. 'UPDATE', 'TRUNCATE'));
Note que você não pode especificar OWNERSHIP ou ALL como privilégios.
Retornos¶
Uma representação de cadeia de caracteres serializada da referência que pode ser usada como um identificador.
Notas de uso¶
O argumento 'object_type'
deve corresponder ao tipo do objeto especificado por object_identifier
.
Solução de problemas¶
Os cenários a seguir podem ajudar você a solucionar problemas que podem ocorrer.
Erro |
505028 (42601): Object type <object_type> does not match the specified type <type_of_the_specified_object> for reference creation
|
---|---|
Causa |
Se você tentar criar uma referência usando a função SYSTEM$REFERENCE e o argumento |
Solução |
Verifique se o tipo do objeto especificado por |
Exemplos¶
Consulte Contexto: o problema de passar tabelas, exibições e consultas para procedimentos armazenados.