sql >> Databáze >  >> RDS >> Oracle

Jak vrátit sadu výsledků / kurzor z anonymního bloku Oracle PL/SQL, který provádí dynamické SQL?

Můžete napsat funkci PL/SQL, která vrátí tento kurzor (nebo můžete tuto funkci vložit do balíčku, pokud s tím souvisí více kódu):

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;

Tím vrátíte kurzor.

Ujistěte se, že jste nezadali SELECT -Pokud je to možné, uveďte řetězec do uvozovek v PL/SQL. Vložení do řetězců znamená, že jej nelze zkontrolovat v době kompilace a že je nutné jej analyzovat, kdykoli jej použijete.

Pokud opravdu potřebujete použít dynamické SQL, můžete dotaz vložit do jednoduchých uvozovek:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

Tento řetězec je nutné analyzovat při každém volání funkce, což bude obvykle pomalejší a skryje chyby ve vašem dotazu až do spuštění.

Ujistěte se, že tam, kde je to možné, používáte proměnné vazby, abyste se vyhnuli tvrdým analýzám:

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


  1. Prohlášení FORALL s dolní a horní hranicí v databázi Oracle

  2. Jak provést operaci obnovení při selhání pro nastavení replikace MySQL

  3. Jak převést řetězec na datum/čas na serveru SQL pomocí PARSE()

  4. Jak odebrat databázový poštovní účet z profilu v SQL Server (T-SQL)