Как ввести курсор в качестве входных данных в процедуре oracle

Я хочу создать процедуру, которая использует курсор в качестве входных данных в Oracle. Я попробовал что-то вроде этого:

cursor cur is select * from table t1;

а затем также:

create or replace procedure (I want to input cursor cur here)
is
begin
end;/

Как мне это сделать?

Привет! Как вы думаете, каким будет тип данных параметра, который вы передаете в SP? Почему бы просто не запустить курсор внутри SP — это кажется гораздо более простым подходом?

NickW 26.05.2024 17:47

Если вам нужно передать курсор, вы должны использовать REF CURSOR. Используйте тип sys_refcursor для легкодоступного курсора слабой ссылки, откройте его для нужного запроса и передайте его процедуре, которая должна ожидать аргумент типа sys_refcursor. Затем он может выполнить выборку из курсора, но ответственность за то, чтобы он извлекался в правильно выровненную структуру строк, лежит на нем. Это очень помогает стандартизировать список столбцов для курсоров, передаваемых определенному процессу. Имейте в виду, что использование реф-курсоров — это промежуточный метод, а не тот, который следует использовать без необходимости.

Paul W 26.05.2024 17:52

@NickW Я не могу использовать таблицу в процедуре, поскольку таблица существует в другой базе данных, и у меня нет прав на создание ссылки на базу данных и нет доступа для создания таблицы или процедуры в другой базе данных

Bahy Mohamed 26.05.2024 17:56

@Mark - Если нет ссылки на базу данных и вы не можете создать ссылку на базу данных, я не понимаю, как можно открыть курсор, который запрашивает удаленную таблицу в базе данных, где существует процедура, чтобы передать sys_refcursor процедуре. Вы не можете подключиться к удаленной базе данных, открыть там курсор, а затем передать его локальной процедуре, если вы об этом думаете. Вам придется решить основную проблему: вам нужны данные из удаленной базы данных, но локальный администратор базы данных не хочет подключений к этой удаленной базе данных.

Justin Cave 26.05.2024 21:58
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот пример, который показывает один из способов сделать это.

Процедура, которая принимает курсор в качестве параметра, проходит по нему и отображает его содержимое:

SQL> create or replace procedure p_test (par_cursor in sys_refcursor)
  2  is
  3    l_ename emp.ename%type;
  4    l_sal   emp.sal%type;
  5  begin
  6    loop
  7      fetch par_cursor into l_ename, l_sal;
  8      exit when par_cursor%notfound;
  9      dbms_output.put_line(l_ename ||' - '|| l_sal);
 10    end loop;
 11  end;
 12  /

Procedure created.

Как это использовать?

SQL> set serveroutput on
SQL> declare
  2    l_rc sys_refcursor;
  3  begin
  4    open l_rc for
  5      select ename, sal
  6        from emp
  7        where deptno = 10;
  8    p_test (l_rc);
  9  end;
 10  /
CLARK - 2450
KING - 5000
MILLER - 1300

PL/SQL procedure successfully completed.

SQL>

Другие вопросы по теме