आप जिस सिंटैक्स का उपयोग करते हैं वह निश्चित रूप से कुछ ऐसा है जो Oracle में समर्थित नहीं है PLSQL
. ऑरैकल में PLSQL
आपको कुछ ऐसा करने की ज़रूरत है:
-- 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;
/
या @a_horse_with_no_name के अनुसार, पाइपलाइन फ़ंक्शन का उपयोग करके, यह नीचे जैसा हो सकता है:
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;
/