sql >> Databasteknik >  >> RDS >> Oracle

Hur returnerar man en resultatuppsättning/markör från ett anonymt Oracle PL/SQL-block som kör Dynamic SQL?

Du kan skriva en PL/SQL-funktion för att returnera den markören (eller så kan du lägga den funktionen i ett paket om du har mer kod relaterad till detta):

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;

Detta kommer att returnera markören.

Se till att inte sätta din SELECT - Sträng in citattecken i PL/SQL när det är möjligt. Att lägga det i strängar innebär att det inte kan kontrolleras vid kompilering och att det måste tolkas när du använder det.

Om du verkligen behöver använda dynamisk SQL kan du sätta din fråga inom enkla citattecken:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

Den här strängen måste analyseras när funktionen anropas, vilket vanligtvis är långsammare och döljer fel i din fråga fram till körningen.

Se till att använda bind-variabler där det är möjligt för att undvika hårda analyser:

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


  1. Hur man utvärderar uttryck i select-sats i Postgres

  2. Hur kan jag kontrollera MySQL-motortypen för en specifik tabell?

  3. SqlConnection SqlCommand SqlDataReader ID Disposable

  4. ODP.NET Managed - Det går inte att hitta efterfrågad .Net Framework-dataleverantör