sql >> Database teknologi >  >> RDS >> Oracle

Returner en tabel i en PL/SQL-funktion

Syntaksen, du bruger os, er bestemt noget, der ikke understøttes i Oracle PLSQL . I oracle PLSQL du skal gøre noget som:

-- Create Object of your table CREATE TYPE TABLE_RES_OBJ AS OBJECT ( IDINGREDIENT INT , NOMINGREDIENT VARCHAR (255) , QUANTITE INT ); --Create a type of your object CREATE TYPE TABLE_RES AS TABLE OF TABLE_RES_OBJ; / --Function Use the type created as Return Type CREATE OR REPLACE FUNCTION CHANGENBPERSONNES ( RECETTE IN INT, NBPERSONNE IN INT) RETURN TABLE_RES AS CURSOR CURSEUR_ETAPE IS SELECT TABLE_RES_OBJ (IR.*) FROM INGREDIENTRECETTE IR JOIN RECETTE R ON IR.IDRECETTE =R.IDRECETTE JOIN INGREDIENT I ON IR.IDINGREDIENT = I.IDINGREDIENT WHERE R.IDRECETTE = RECETTE; VAR TABLE_RES:= TABLE_RES(); BEGIN OPEN CURSEUR_ETAPE; LOOP FETCH CURSEUR_ETAPE BULK COLLECT INTO VAR LIMIT 100; EXIT WHEN CURSEUR_ETAPE%NOTFOUND; END LOOP; CLOSE CURSEUR_ETAPE; RETURN VAR; END; /

Eller i henhold til @a_horse_with_no_name, ved at bruge PipeLine-funktionen, kan det være som nedenfor:

CREATE OR REPLACE FUNCTION CHANGENBPERSONNES (RECETTE      IN INT,
                                              NBPERSONNE   IN INT)
   RETURN TABLE_RES
   PIPELINED
AS
   CURSOR CURSEUR_ETAPE
   IS
      SELECT *
        FROM INGREDIENTRECETTE IR
             JOIN RECETTE R ON IR.IDRECETTE = R.IDRECETTE
             JOIN INGREDIENT I ON IR.IDINGREDIENT = I.IDINGREDIENT
       WHERE R.IDRECETTE = RECETTE;
BEGIN
   FOR i IN CURSEUR_ETAPE
   LOOP
      PIPE ROW (TABLE_RES_OBJ (i.idingredient, i.Nom, i.quantite));
      EXIT WHEN CURSEUR_ETAPE%NOTFOUND;
   END LOOP;

   RETURN;
END;
/
 



  1. Giv valg på alle borde, der ejes af en bestemt bruger

  2. tomcat-forbindelse afbrudt efter en periode med inaktivitet

  3. Forespørgselselementer i et indlejret array af et json-objekt i postgresql 9.4 eller 9.5

  4. Brug gruppe efter indvendig underforespørgsel