如何让一个PL/SQL存储过程显示一个table?
How to make a PL/SQL stored procedure display a table?
假设我有一个叫 table 的学生,它有 3 个属性,学号、姓名和最喜欢的颜色,当我这样调用程序时:
execute favColor('RED');
输出应该是:
NAME FAV_COLOR
-------- -----------
MARY RED
JANE RED
PETER RED
JOHN RED
我可以提供示例代码来执行此操作吗?到目前为止,我只看到程序插入或更新记录,如果程序中有 select 语句,它必须有一个 into 子句,这是否意味着程序不可能显示此输出?
因为我没有你的 table,我将使用 Scott 的工作而不是颜色。
示例数据:
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.
程序将 return 有特定工作的员工:
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>
假设我有一个叫 table 的学生,它有 3 个属性,学号、姓名和最喜欢的颜色,当我这样调用程序时:
execute favColor('RED');
输出应该是:
NAME FAV_COLOR
-------- -----------
MARY RED
JANE RED
PETER RED
JOHN RED
我可以提供示例代码来执行此操作吗?到目前为止,我只看到程序插入或更新记录,如果程序中有 select 语句,它必须有一个 into 子句,这是否意味着程序不可能显示此输出?
因为我没有你的 table,我将使用 Scott 的工作而不是颜色。
示例数据:
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.
程序将 return 有特定工作的员工:
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>