Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

PL/SQL फ़ंक्शन में तालिका लौटाएं

आप जिस सिंटैक्स का उपयोग करते हैं वह निश्चित रूप से कुछ ऐसा है जो 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;
/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. c3p0 को हाइबरनेट में पुराने डीबी कनेक्शन को ऑटो-रीफ्रेश करने के लिए कैसे कॉन्फ़िगर करें

  2. क्या मैं Oracle संग्रहीत कार्यविधि में :OLD और :NEW छद्म अभिलेखों की प्रतिलिपि बना सकता/सकती हूँ?

  3. Concat फ़ंक्शन काम नहीं कर रहा है - तर्कों की अमान्य संख्या

  4. SQL 'कहाँ' खंड में शर्तों का निष्पादन क्रम

  5. Oracle लांग रॉ समस्या