Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да върна набор от резултати/курсор от анонимен блок на Oracle PL/SQL, който изпълнява Dynamic SQL?

Можете да напишете PL/SQL функция, за да върне този курсор (или можете да поставите тази функция в пакет, ако имате повече код, свързан с това):

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;

Това ще върне курсора.

Уверете се, че не поставяте своя SELECT - Низ в кавички в PL/SQL, когато е възможно. Поставянето му в низове означава, че не може да се проверява по време на компилиране и че трябва да се анализира всеки път, когато го използвате.

Ако наистина трябва да използвате динамичен SQL, можете да поставите заявката си в единични кавички:

  OPEN my_cursor FOR 'SELECT * FROM allitems';

Този низ трябва да се анализира при всяко извикване на функцията, което обикновено е по-бавно и скрива грешките във вашата заявка до времето за изпълнение.

Уверете се, че използвате свързващи променливи, където е възможно, за да избегнете трудни анализи:

  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. RDLC LocalReport Експорт в Excel наистина бавен

  2. Как да свържете Airflow към базата данни на Oracle

  3. Как да декларирам променлива и да я използвам в същия Oracle SQL скрипт?

  4. C#:Предайте дефиниран от потребителя тип към съхранена процедура на Oracle

  5. Рекурсия в Oracle