D'après le guide des concepts :
La phrase importante ici est "orientée vers l'enregistrement". La syntaxe pour la déclaration explicite du curseur
montre également clairement que le type de retour doit être un rowtype
, qu'il définit comme :
Vous lui demandez de renvoyer le type de données d'une seule colonne, pas d'une ligne/enregistrement. Si vous ne souhaitez pas utiliser un %ROWTYPE
existant alors Oracle fournit le mécanisme pour déclarer un type d'enregistrement à la place, comme une autre réponse l'a déjà montré.
Vous semblez vous plaindre que la documentation ne dit pas que vous ne pouvez pas utiliser une valeur scalaire comme retour. Cela ne dit pas non plus que vous ne pouvez pas renvoyer un package, une vue ou un rôle. Il n'est pas nécessaire d'énumérer de manière exhaustive tout ce que vous ne pouvez pas faire, puisqu'il vous dit clairement exactement ce que vous pouvez faire, qui consiste à renvoyer un type qui représente une ligne.
Dans votre cas, ce type de ligne ne doit contenir qu'une seule colonne, mais il n'y a toujours aucune raison pour que vous puissiez - ou vous attendre à ce qu'Oracle - vous permette de prendre un raccourci dans ce scénario très limité. Il ne semble pas déraisonnable de fournir un seul mécanisme cohérent - il n'est pas très difficile pour vous de déclarer le record
, alors que construire, tester et maintenir un chemin séparé pour cela représenterait une surcharge considérable.