Maison > base de données > tutoriel mysql > Comment renvoyer plusieurs jeux de résultats à partir d'une procédure stockée Oracle PL/SQL ?

Comment renvoyer plusieurs jeux de résultats à partir d'une procédure stockée Oracle PL/SQL ?

Mary-Kate Olsen
Libérer: 2024-12-29 04:40:09
original
178 Les gens l'ont consulté

How to Return Multiple Result Sets from an Oracle PL/SQL Stored Procedure?

Renvoi de plusieurs ensembles de résultats avec des procédures stockées Oracle PL/SQL

Question :

Comment pouvons-nous créer une procédure stockée qui récupère divers ensembles de données en fonction d'un argument passé et l'appelle ensuite depuis plain SQL ?

Réponse :

Pour renvoyer plusieurs jeux de résultats à partir d'une procédure stockée Oracle PL/SQL, nous pouvons utiliser l'approche suivante :

  1. Créer des types d'objets et de tables :

    Tout d'abord, nous définissons les types d'objets et de tables pour représenter la structure de données de notre résultat. ensembles. Dans cet exemple, nous créons un type d'objet emp_obj avec deux attributs : empno (numéro) et ename (varchar2). Nous créons ensuite un type de table emp_tab comme une collection d'objets emp_obj.

  2. Construisons la procédure stockée :

    Nous définissons une fonction (all_emps dans ce cas) qui renvoie une collection emp_tab. À l'intérieur de la fonction :

    • Initialisez une variable emp_tab vide.
    • Effectuez une boucle pour parcourir les lignes souhaitées (dans cet exemple, récupérer empno et ename de la table emp).
    • Étendez la collection emp_tab et attribuez les valeurs de chaque ligne à un emp_obj instance.
    • Renvoyer la collection emp_tab remplie.
  3. Appeler la procédure stockée depuis SQL :

    Pour appeler la fonction all_emps de SQL, nous utilisons l'opérateur table. Cela nous permet d'interroger la collection renvoyée sous forme de table normale.

Exemple :

SQL> create type emp_obj is object (empno number, ename varchar2(10));

SQL> create type emp_tab is table of emp_obj;

SQL> create or replace function all_emps return emp_tab
is
    l_emp_tab emp_tab := emp_tab();
    n integer := 0;
begin
    for r in (select empno, ename from emp)
    loop
        l_emp_tab.extend;
        n := n + 1;
        l_emp_tab(n) := emp_obj(r.empno, r.ename);
    end loop;
    return l_emp_tab;
end;

SQL> select * from table (all_emps);
Copier après la connexion

Résultat :

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN
      7698 BLAKE
      7782 CLARK
      7788 SCOTT
      7839 KING
      7844 TURNER
      7902 FORD
      7934 MILLER
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal