请举一个pl/sql函数返回多值的例子,易懂的,谢谢

解决方案 »

  1.   

    (1) 创建types 结构定义为OBJECT
    create or replace type emp_type as object(
    empno number(4),
    ename varchar2(10),
    sal number(7,2),
    deptno number(2));(2)对类型进行说明 OBJECT是Table类型
    CREATE OR REPLACE TYPE emp_table AS TABLE OF emp_Type;(3)返回创建函数
    create or replace function emp_test(p_deptno in emp.deptno%type)
      return emp_table pipelined as
    v_emp_rows emp_type;
    begin
      for myrow in (select empno,ename,sal,deptno from emp where deptno=p_deptno) loop
        v_emp_rows := emp_type(myrow.empno,myrow.ename,myrow.sal,myrow.deptno);
        pipe row (v_emp_rows);
      end loop;
      return;
    end;
    调用
    select * from table(emp_test(10));
    select * from table(emp_test(20));
    select * from table(emp_test(30));
      

  2.   

    先感谢java3344520
    (1) 创建types 结构定义为OBJECT
    (2)对类型进行说明 OBJECT是Table类型
    (3)返回创建函数
    三步的代码都写在pl/sql里的一个SQL Window里吗?
      

  3.   

    也就是说写在三个SQL Window里面还是写在一个包里面呢?
      

  4.   


    可以在一个包体里面的,包体里面可以定义type变量,也可以定义function函数。
      

  5.   

       不是,是在SQL Window 按(1)、(2)、(3)分别执行
      

  6.   

    #######需要在定义全局Type,否则不能在pipelined方法里面作为返回类型 --start
    (1) 创建types 结构定义为OBJECT
    create or replace type emp_type is object(
    empno number(4),
    ename varchar2(10),
    sal number(7,2),
    deptno number(2));(2)对类型进行说明 OBJECT是Table类型
    CREATE OR REPLACE TYPE emp_table is TABLE OF emp_Type;
    #######需要在定义全局Type --endcreate or replace my_pkg is  
    type refcursor is ref cursor;function emp_test(p_deptno in emp.deptno%type)
      return emp_table pipelined is
    v_emp_rows emp_type;
    begin
      for myrow in (select empno,ename,sal,deptno from emp where deptno=p_deptno) loop
        v_emp_rows := emp_type(myrow.empno,myrow.ename,myrow.sal,myrow.deptno);
        pipe row (v_emp_rows);
      end loop;
      return;
    end;function get_result(p_deptno in emp.deptno%type) return refcursor is
      o_result_cur refcursor;
      begin
        open o_result_cur for
        select * from table(case emp_test(p_deptno) as emp_table);
      return o_result_cur;
    end get_result;end my_pkg;调用
    result = my_pkg.get_result(10);