FonctionSYSTEM$REFERENCE : la création d’une référence avec des types d’objets non concordants échoue

Attention

Ce changement de comportement est présent dans le bundle 2023_08.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Vous pouvez créer une reference à un objet à l’aide de la fonction SYSTEM$REFERENCE. Une référence autorise l’accès à un objet à une procédure stockée, à une instance de classe ou à une application qui ne peut pas accéder à l’objet autrement. La référence est transmise en tant qu’identificateur à une procédure stockée, une instance de classe ou une application ayant des privilèges spécifiques et limités sur un objet.

L’argument object_type de la fonction SYSTEM$REFERENCE doit correspondre au type de l’objet que la référence identifie. Dans l’exemple suivant, t1 est une table et correspond au type d’objet TABLE:

SELECT SYSTEM$REFERENCE('TABLE', 't1', 'SESSION', 'SELECT');
Copy

La fonction SYSTEM$REFERENCE se comporte comme suit :

Avant la modification:

Si vous créez une référence à l’aide de la fonction SYSTEM$REFERENCE, que l’argument object_type est TABLE et que le nom de l’objet correspond à un type d’objet de type tableau (c’est-à-dire TABLE, VIEW, EXTERNAL TABLE ou MATERIALIZED VIEW), la fonction réussit.

Après la modification:

Si vous essayez de créer une référence à l’aide de la fonction SYSTEM$REFERENCE et que l’argument object_type est TABLE, mais que le nom de l’objet se résout en un type d’objet de type tableau autre que TABLE (c’est-à-dire VIEW, EXTERNAL TABLE ou MATERIALIZED VIEW), la fonction échoue.

Par exemple, si vous utilisez le type d’objet TABLE pour la vue v1 avec l’instruction suivante :

SELECT SYSTEM$REFERENCE('TABLE', 'v1', 'SESSION', 'SELECT');
Copy

L’instruction donne lieu à l’erreur suivante :

505028 (42601): Object type VIEW does not match the specified type TABLE for reference creation

Réf : 1315