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');
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');
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