Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zwrócić zestaw wyników/kursor z anonimowego bloku Oracle PL/SQL, który wykonuje Dynamic SQL?

Możesz napisać funkcję PL/SQL, która zwróci ten kursor (lub możesz umieścić tę funkcję w pakiecie, jeśli masz więcej związanego z tym kodu):

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;

Spowoduje to zwrócenie kursora.

Upewnij się, że nie umieszczasz swojego SELECT -String w cudzysłowie w PL/SQL, jeśli to możliwe. Umieszczenie go w łańcuchach oznacza, że ​​nie można go sprawdzić w czasie kompilacji i musi być analizowany za każdym razem, gdy go używasz.

Jeśli naprawdę potrzebujesz użyć dynamicznego SQL, możesz umieścić swoje zapytanie w pojedynczych cudzysłowach:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

Ten ciąg musi być analizowany za każdym razem, gdy funkcja jest wywoływana, co zwykle jest wolniejsze i ukrywa błędy w zapytaniu do czasu uruchomienia.

Upewnij się, że używasz zmiennych wiążących tam, gdzie to możliwe, aby uniknąć trudnych analiz:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Film:Wydajność kolumny Oracle 12c IDENTITY w systemie RAC

  2. Jaka jest różnica między jawnymi i niejawnymi kursorami w Oracle?

  3. Wywołanie procedury składowanej Oracle z parametrem wyjściowym z SQL Server

  4. Przebieg logowania w R12.2 i podstawowe rozwiązywanie problemów

  5. Równoległe wywołania w PL/SQL