Renvoi de plusieurs ensembles de résultats à partir d'Oracle PL/SQL
Considérez la nécessité de créer une procédure stockée qui renvoie dynamiquement plusieurs ensembles de résultats en fonction de l'entrée arguments. Voici comment y parvenir dans Oracle PL/SQL :
Création de la procédure stockée
Pour renvoyer plusieurs jeux de résultats, créez d'abord un type d'objet qui représente les données de chaque ensemble de résultats. Par exemple, pour renvoyer les données des employés :
CREATE TYPE EMP_OBJ IS OBJECT (EMPNO NUMBER, ENAME VARCHAR2(10));
Ensuite, créez un type de table qui stocke une collection de ces objets :
CREATE TYPE EMP_TAB IS TABLE OF EMP_OBJ;
Maintenant, créez la procédure stockée. Voici un exemple qui assigne des objets à un tableau et le renvoie :
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;
Appel depuis Plain SQL
Une fois la procédure stockée créée, vous pouvez l'appeler SQL simple en utilisant le constructeur TABLE() :
SELECT * FROM TABLE (ALL_EMPS);
Cette requête renverra tous les employés dans un seul résultat table.
Exemple
Considérez la procédure stockée suivante :
CREATE OR REPLACE PROCEDURE GET_EMPLOYEES ( DEPT INTEGER, OUT RECORDS OUT SYS_REFCURSOR ) IS ... END;
Vous pouvez appeler cette procédure et accéder aux enregistrements renvoyés à l'aide d'un curseur :
DECLARE EMP_CUR SYS_REFCURSOR; BEGIN GET_EMPLOYEES(10, EMP_CUR); LOOP FETCH EMP_CUR INTO EMP_OBJ; EXIT WHEN EMP_CUR%NOTFOUND; ... END LOOP; END;
En utilisant des types d'objets, des types de tables et des curseurs, vous pouvez renvoyer efficacement plusieurs jeux de résultats à partir d'Oracle PL/SQL stockés procédures. Cela offre flexibilité et efficacité lorsque vous travaillez avec des données complexes dans vos applications.
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!