Oracle
 sql >> Base de données >  >> RDS >> Oracle

Type de retour du curseur Oracle

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.