Oracle SQL过程可以返回表吗?我目前使用dbms_output来打印出两个游标的输出,这两个游标在一个循环中,尽管如果它返回两列会更好一些。在一个过程中这是可能的吗?
发布于 2012-12-03 05:05:49
PL/SQL函数可以返回嵌套表。如果我们将嵌套表声明为SQL类型,则可以使用the TABLE() function将其用作查询的源。
下面是一个类型,以及基于它构建的嵌套表:
SQL> create or replace type emp_dets as object (
2 empno number,
3 ename varchar2(30),
4 job varchar2(20));
5 /
Type created.
SQL> create or replace type emp_dets_nt as table of emp_dets;
2 /
Type created.
SQL> 下面是一个函数,它返回嵌套表...
create or replace function get_emp_dets (p_dno in emp.deptno%type)
return emp_dets_nt
is
return_value emp_dets_nt;
begin
select emp_dets(empno, ename, job)
bulk collect into return_value
from emp
where deptno = p_dno;
return return_value;
end;
/..。它是这样工作的:
SQL> select *
2 from table(get_emp_dets(10))
3 /
EMPNO ENAME JOB
---------- ------------------------------ --------------------
7782 CLARK MANAGER
7839 KING PRESIDENT
7934 MILLER CLERK
SQL> SQL类型为我们提供了大量的功能,并允许我们在PL/SQL中构建相当复杂的API。Find out more。
发布于 2016-04-12 16:09:19
我认为您可以使用Oracle游标(如果您的Oracle版本支持它的话):
PROCEDURE myprocedure(
mycursor OUT SYS_REFCURSOR )
AS
BEGIN
OPEN mycursor FOR SELECT * FROM mytable;
END;
END;发布于 2012-12-06 23:14:09
这也可能会有所帮助:
DECLARE
TYPE t_emptbl IS TABLE OF scott.emp%rowtype;
v_emptbl t_emptbl;
ret_val t_emptbl;
--
Function getEmployeeList Return t_emptbl
IS
BEGIN
SELECT * bulk collect INTO v_emptbl FROM scott.emp;
-- Print nested table of records:
FOR i IN 1 .. v_emptbl.COUNT LOOP
DBMS_OUTPUT.PUT_LINE (v_emptbl(i).empno);
END LOOP;
RETURN v_emptbl;
END;
--
BEGIN
ret_val:= getEmployeeList;
END;
/https://stackoverflow.com/questions/13673502
复制相似问题