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

Hvordan returnerer man et resultatsæt/markør fra en anonym Oracle PL/SQL-blok, der udfører Dynamic SQL?

Du kan skrive en PL/SQL-funktion for at returnere den markør (eller du kan placere den funktion i en pakke, hvis du har mere kode relateret til dette):

CREATE OR REPLACE FUNCTION get_allitems
  RETURN SYS_REFCURSOR
AS
  my_cursor SYS_REFCURSOR;
BEGIN
  OPEN my_cursor FOR SELECT * FROM allitems;
  RETURN my_cursor;
END get_allitems;

Dette vil returnere markøren.

Sørg for ikke at indtaste din SELECT - Indsæt anførselstegn i PL/SQL, når det er muligt. At sætte det i strenge betyder, at det ikke kan kontrolleres på kompileringstidspunktet, og at det skal parses, når du bruger det.

Hvis du virkelig har brug for at bruge dynamisk SQL, kan du sætte din forespørgsel i enkelte anførselstegn:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

Denne streng skal parses, hver gang funktionen kaldes, hvilket normalt vil være langsommere og skjuler fejl i din forespørgsel indtil runtime.

Sørg for at bruge bind-variabler, hvor det er muligt for at undgå hårde parses:

  OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;


  1. Kan nogen forklare, hvad MERGE-erklæringen virkelig gør i Oracle?

  2. Fjern SCHEMABINDING fra en visning i SQL Server

  3. Sortering i MySQL ved hjælp af rækkefølge efter klausul

  4. Sådan opretter du relationer i MySQL