sql >> Database >  >> RDS >> Oracle

Hoe een resultatenset / cursor retourneren van een Oracle PL/SQL anoniem blok dat Dynamic SQL uitvoert?

Je kunt een PL/SQL-functie schrijven om die cursor te retourneren (of je zou die functie in een pakket kunnen plaatsen als je meer code hebt die hiermee verband houdt):

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;

Dit zal de cursor terugbrengen.

Zorg ervoor dat u uw SELECT - Zet waar mogelijk tussen aanhalingstekens in PL/SQL. Door het in strings te plaatsen, kan het niet worden gecontroleerd tijdens het compileren en moet het worden geparseerd wanneer u het gebruikt.

Als u echt dynamische SQL moet gebruiken, kunt u uw zoekopdracht tussen enkele aanhalingstekens plaatsen:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

Deze tekenreeks moet worden geparseerd wanneer de functie wordt aangeroepen, wat meestal langzamer is en fouten in uw zoekopdracht tot runtime verbergt.

Zorg ervoor dat u waar mogelijk bindvariabelen gebruikt om harde parsen te vermijden:

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


  1. SQL Server kapt varchar's stil af in opgeslagen procedures

  2. onbeforeprint() en onafterprint() equivalent voor niet-IE-browsers

  3. Wat is het gemiddelde salaris van een SQL-ontwikkelaar?

  4. Tips voor back-upbeheer voor TimescaleDB