Как сделать так, чтобы хранимая процедура PL / SQL отображала таблицу? - PullRequest
0 голосов
/ 29 апреля 2020

Допустим, у меня есть таблица с именем студента, которая имеет 3 атрибута, номер студента, имя и любимый цвет, и когда я вызываю процедуру следующим образом:

execute favColor('RED');

результат должен быть:

NAME     FAV_COLOR 
-------- -----------
MARY     RED
JANE     RED
PETER    RED
JOHN     RED

Могу ли я иметь пример кода для этого? До сих пор я вижу только процедуры, вставляющие или обновляющие записи, и если в процедуре есть оператор select, он должен иметь предложение in, означает ли это, что процедуры не могут отобразить этот вывод?

1 Ответ

3 голосов
/ 29 апреля 2020

Поскольку у меня нет вашей таблицы, я буду использовать Скотта с заданиями вместо цветов.

Пример данных:

SQL> select ename, job from emp order by job, ename;

ENAME      JOB
---------- ---------
FORD       ANALYST
SCOTT      ANALYST
ADAMS      CLERK
JAMES      CLERK
MILLER     CLERK
SMITH      CLERK
BLAKE      MANAGER
CLARK      MANAGER
JONES      MANAGER
KING       PRESIDENT
ALLEN      SALESMAN
MARTIN     SALESMAN
TURNER     SALESMAN
WARD       SALESMAN

14 rows selected.

Процедура вернет сотрудников, которые имеют определенную работу:

SQL> create or replace procedure favJob (par_job in varchar2, par_rc out sys_refcursor)
  2  is
  3  begin
  4    open par_rc for
  5      select ename, job
  6      from emp
  7      where job = par_job
  8      order by ename;
  9  end;
 10  /

Procedure created.

Тестирование:

SQL> var rc refcursor
SQL> exec favJob('MANAGER', :rc);

PL/SQL procedure successfully completed.

SQL> print rc

ENAME      JOB
---------- ---------
BLAKE      MANAGER
CLARK      MANAGER
JONES      MANAGER

SQL>
...