Comment retourner des lignes à partir d'un déclarer/début/fin de bloc dans Oracle?
Je veux retourner des lignes à partir d'une instruction select dans un déclarer/début/fin de bloc. Je peux le faire en T-SQL, mais je voudrais savoir comment faire dans le PL/SQL.
Le code ressemble un peu à la suivante:
declare
blah number := 42;
begin
select *
from x
where x.value = blah;
end;
Vous ne pouvez pas renvoyer les données anonymes PLSQL bloc.
oui, vous pouvez, par exemple dans
oui, vous pouvez, par exemple dans
node oracledb
vous utilisez oracledb.BIND_OUT
case github.com/oracle/node-oracledb/blob/master/doc/api.md
OriginalL'auteur Thomas Bratt | 2010-07-30
Vous devez vous connecter pour publier un commentaire.
Anonyme PL/SQL bloc, comme celui que vous avez indiqué, ne peut "retourner" quoi que ce soit. Il peut interagir avec l'appelant par le moyen de lier les variables, cependant.
Si la méthode que je voudrais utiliser dans ce cas serait de déclarer un curseur de référence, de l'ouvrir dans le PL/SQL pour la requête souhaitée, et de laisser l'application appelante extraire les lignes de. Dans SQLPlus cela ressemblerait à:
Si vous refonte de votre PL/SQL comme une fonction stockée, puis il pourrait valeurs de retour. Dans ce cas, ce que vous voulez faire est de créer un type de collection, récupération de toutes les lignes dans une variable de ce type, et de le retourner:
Un curseur est rien de plus qu'une référence à un jeu de résultats. La performance de pénalité vient de le faire d'allers-retours qui sont impliqués entre l'extraction de chaque enregistrement. Cependant, tous les sélectionnez-vous invoquer à l'encontre de Oracle devra être retourné à vous sous la forme d'un curseur. Dans .Net, ils sont appelés DataReaders. Lorsque vous n'avez pas la perf des problèmes avec ceux-ci, vous n'aurez pas de perf de problèmes avec les curseurs.
OriginalL'auteur Dave Costa
Eh bien, cela dépend fortement de votre bibliothèque d'accès aux données.
Vous pouvez retourner n'importe quel compatible SQL de type en tant que paramètre. Ce complexe comprend des types SQL et types de collection.
Mais la plupart des bibliothèques sont tout simplement pas capable de gérer Oracle types d'objet.
De toute façon, mes exemples l'utilisation de ces types d'objets:
Lors de votre bibliothèque d'accès peut gérer les types d'objet, vous pouvez simplement retourner une liste de PL/SQL d'objets:
Si non, vous pourriez hack autour d'elle en forçant cette liste dans un select et retourne son résultat sous forme d'un curseur:
OriginalL'auteur Robert Giesecke