Catégories :

Fonctions système (informations)

SYSTEM$REFERENCE

Renvoie une référence à un objet (une table, une vue ou une fonction). Lorsque vous exécutez des actions SQL sur une référence à un objet, les actions sont effectuées en utilisant le rôle de l’utilisateur qui a créé la référence.

Voir aussi :

SYSTEM$QUERY_REFERENCE

Syntaxe

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

Arguments

Nécessaire

object_type

Type de l’objet. Vous pouvez spécifier l’une des valeurs suivantes :

  • api_integration

  • database

  • external_table

  • function

  • materialized_view

  • pipe

  • procedure

  • schema

  • table

  • task

  • view

  • warehouse

object_identifier

Identificateur de l’objet. Si l’identificateur contient des espaces ou des caractères spéciaux, toute la chaîne doit être délimitée par des guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse.

Pour plus de détails sur les identificateurs, voir Exigences relatives à l’identificateur.

Facultatif

reference_scope

Spécifie le champ d’application de la référence.

Si CALL ou omis, spécifique que la référence est valable dans le contexte dans lequel elle a été créée. Voir Précision du champ d’application de la référence.

Si SESSION, spécifie que la référence doit être valable pour la durée de la session.

Si PERSISTENT, spécifie que la référence doit être valide jusqu’à ce que l’objet soit supprimé. Voir les références persistantes.

Note : si vous devez spécifier l’argument privilege, l’argument reference_scope est requis.

Valeurs valides :

  • CALL

  • SESSION

  • PERSISTENT

Valeur par défaut : CALL

privilege

Privilège supplémentaire nécessaire pour exécuter une action SQL sur l’objet.

Par exemple, supposons que vous transmettiez la référence d’une table à une procédure stockée qui insère des lignes dans cette table. Spécifiez 'INSERT' pour conférer à la procédure stockée le privilège INSERT sur cette table.

Pour une liste des objets et privilèges pris en charge, consultez Types d’objets pris en charge et privilèges pour les références.

Pour spécifier plus d’un privilège supplémentaire, transmettez chaque nom de privilège en tant qu’argument supplémentaire à la fonction. Par exemple, pour conférer les privilèges INSERT, UPDATE, et TRUNCATE :

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

Notez que vous ne pouvez pas spécifier OWNERSHIP ou ALL comme privilèges.

Renvoie

Une représentation sous forme de chaîne sérialisée de la référence qui peut être utilisée comme identificateur.

Notes sur l’utilisation

L’argument object_type doit correspondre au type de l’objet spécifié par object_identifier.

Dépannage

Les scénarios suivants peuvent vous aider à résoudre les problèmes qui peuvent survenir.

Erreur

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

Cause

Si vous essayez de créer une référence à l’aide de la fonction SYSTEM$REFERENCE et que l’argument object_type ne correspond pas au type de l’objet spécifié par object_identifier, la fonction échoue. Par exemple, si l’argument object_type est TABLE, mais que object_identifier se résout en un type d’objet autre que TABLE (par exemple, VIEW), la fonction échoue.

Solution

Vérifiez que le type de l’objet spécifié par object_identifier correspond à l’argument object_type. Pour une liste des types d’objets pris en charge, voir Types d’objets pris en charge et privilèges pour les références.

Exemples

Voir Un exemple simple.