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.

Note

Au lieu d’appeler cette fonction, vous pouvez utiliser le mot-clé TABLE si vous avez besoin de créer une référence à un objet que vous n’envisagez pas de modifier (par exemple, si vous transmettez une table que la procédure stockée interrogera) et si vous souhaitez que la référence soit valide pour le champ d’application de l’appel (plutôt que pour l’ensemble de la session). Voir Utilisation du mot-clé TABLE pour créer une référence à une table, une vue ou une requête.

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

  • compute_pool

  • 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.

Résolution des problèmes

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 Contexte : problème de transmission de tables, de vues et de requêtes à des procédures stockées.