sql >> Database >  >> RDS >> Oracle

Mijn Cursor geretourneerd in mijn orakel PL/SLQ-functie, maar niet alle rijen worden geretourneerd. Kun je maar 1 rij retourneren in een Oracle pl/sql-functie?

Uit de documentatie voor de definitie van into_clause :de SELECT INTO-instructie haalt een of meer kolommen op uit een enkele rij en slaat ze op in een of meer scalaire variabelen of een recordvariabele

Dan moet de huidige SELECT-instructie worden vervangen tegen de gevallen waarin meer dan één rij wordt geretourneerd. De volgende query's kunnen alternatieven zijn voor uw huidige SQL Select-instructie

SELECT reserve_id
  INTO resid
  FROM
  ( SELECT r.*,
           ROW_NUMBER() OVER (ORDER BY 0) AS rn
      FROM reservation
     WHERE Cust_name = cname
       AND Hotel_id = hotelID
       AND reserve_date = resdate
   )
  WHERE rn = 1;

Als de DB-versie 12+ is, gebruik dan

SELECT reserve_id
  INTO resid
  FROM reservation
 WHERE Cust_name = cname
   AND Hotel_id = hotelID
   AND reserve_date = resdate
 FETCH NEXT 1 ROW ONLY; 

zonder een subquery om slechts één rij te retourneren, aangezien u alleen duplicaten krijgt voor die kolommen zonder bestelregels voor de gegevens. Door het gebruik van deze zoekopdrachten is het niet nodig om no_data_found . te verwerken of too_many_rows uitzonderingen.

Bijwerken: Als het je doel is om alle rijen terug te geven, zelfs als er meer dan één rij tegelijk is, dan kun je SYS_REFCURSOR gebruiken zoals

CREATE OR REPLACE FUNCTION findres(cname   reservation.cust_name%type,
                                   hotelID reservation.hotel_id%type,
                                   resdate reservation.reserve_date%type)
  RETURN SYS_REFCURSOR IS
  recordset SYS_REFCURSOR;
BEGIN
  OPEN recordset FOR
  SELECT reserve_id
    FROM reservation
   WHERE Cust_name = cname
     AND Hotel_id = hotelID 
     AND reserve_date = resdate;

  RETURN recordset;
END;
/

en bel op zo'n manier dat

VAR   v_rc REFCURSOR
EXEC :v_rc := findres('Avoras',111,date'2020-12-06');
PRINT v_rc

van de SQL Developer's console.




  1. Kolomwaarden samenvoegen tot een door komma's gescheiden lijst

  2. Hoe kan ik enorme records halen met Laravel en MySQL?

  3. Hoe retourneer ik een jsonb-array en een array met objecten uit mijn gegevens?

  4. Een database ontwerpen voor een wervingssysteem