PL / SQL хранимая процедура - возврат записей из таблицы - PullRequest
0 голосов
/ 06 января 2020

Я очень новичок в выполнении SQL работы. Мне было интересно, как я возвращаю оператор выбора в хранимой процедуре в PL / SQL.

Насколько я понимаю (это мало), что я должен поместить возврат данных в таблицу и назначить данные в таблице к ссылочному курсору. После загрузки L OOP через Курсор REF и представления данных обратно?

На самом деле преобразование этого в код для хранимой процедуры полностью потеряло меня с небольшими примерами, которые можно увидеть в моем случае использования. Любая помощь приветствуется.

Заранее большое спасибо:)

Ответы [ 2 ]

1 голос
/ 06 января 2020

Обычно хранимая процедура используется для выполнения операций с данными в базе данных, а функции используются для возврата значений или данных. Если вы просто пытаетесь использовать оператор SELECT в хранимой процедуре, то вы захотите использовать курсор, который вы объявляете как любую другую переменную в начале процедуры, а затем открываете неявно или явно внутри код процедуры.

Пример неявного курсора:

declare
  cursor sample_cur is  --this can be your select statement
    select sysdate as today from dual;

begin
  for rec in sample_cur loop
     -- step by step for each record you return in your cursor
     dbms_output.put_line(rec.today);
  end loop;
end;
1 голос
/ 06 января 2020

Вот один пример: у процедуры есть только один параметр - OUT -, который является рекурсором:

SQL> create or replace procedure p_test (par_rc out sys_refcursor)
  2  is
  3  begin
  4    open par_rc for select deptno, dname, loc from dept;
  5  end;
  6  /

Procedure created.

Чтобы вызвать такую ​​процедуру, вам нужно сохранить результат во что-то. Для этого я объявлю переменную (в SQL* Plus, которая является инструментом, которую я использую для этого примера) и вызову процедуру, используя блок begin-end, предоставив имя переменной в качестве параметра:

SQL> var l_rc refcursor;
SQL>
SQL> begin
  2    p_test (:l_rc);
  3  end;
  4  /

PL/SQL procedure successfully completed.

Напечатайте результат:

SQL> print l_rc

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL>

Могут быть и другие варианты, которые зависят от того, что вы действительно делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...