ORACLE函数Function返回数据集合

Oracle中的Function可以返回自定义的数据集,记录参考如下:

 

1,Object对象

/*自定义类型 OBJECT Type*/

CREATE OR REPLACE TYPE EMP_ID_TYPE AS OBJECT(org_cd varchar2(10));

 

2,Table对象

/*自定义类型 TABLE Type*/

CREATE OR REPLACE TYPE EMP_ID_TABLE  AS TABLE of EMP_ID_TYPE;

 

3,编写Function

 

CREATE OR REPLACE FUNCTION F_EMP_LIST ()

 

RETURN EMP_ID_TABLE PIPELINED IS

 

 CURSOR emp_list_cursor is

            select  '20001' as emp_id from dual union 

            select  '20002' as emp_id from dual union 

            select  '20003' as emp_id from dual;

 

    v_emp_id_type EMP_ID_TYPE;   --Object对象

    v_emp_id varchar2(5);              --临时变量

 

BEGIN

 

     OPEN emp_list_cursor;

          loop

              

              fetch emp_list_cursor into v_emp_id;

              exit when emp_list_cursor%notfound;

              

              v_emp_id_type := EMP_ID_TYPE(v_emp_id);  --取值

              PIPE ROW(v_emp_id_type);   --管道

              

          end loop;

      CLOSE emp_list_cursor;

 

      return;

 

END;

 

3,测试SQL

 

select * from table(F_EMP_LIST);

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 中,自定义函数只能返回一个值,而不能返回多行数据。如果需要返回多行数据,可以考虑使用游标(Cursor)或者表函数(Table Function)。 使用游标: 可以在自定义函数中使用游标来打开一个结果集,并且在循环中逐行返回数据。以下是一个简单的示例: ``` CREATE OR REPLACE FUNCTION get_employee_list(dept_id NUMBER) RETURN SYS_REFCURSOR IS emp_list SYS_REFCURSOR; BEGIN OPEN emp_list FOR SELECT employee_name, salary FROM employees WHERE department_id = dept_id; RETURN emp_list; END; ``` 在这个函数中,我们打开了一个结果集,并且通过 `RETURN` 语句返回了一个游标。调用该函数时,可以使用 `FETCH` 命令来逐行获取数据。 使用表函数: 另一种方式是使用表函数。表函数可以像普通的表一样使用,可以在 `FROM` 子句中引用,并且可以通过 `SELECT` 命令来获取数据。以下是一个简单的示例: ``` CREATE OR REPLACE FUNCTION get_employee_list(dept_id NUMBER) RETURN EMPLOYEE_TABLE PIPELINED IS BEGIN FOR emp IN (SELECT employee_name, salary FROM employees WHERE department_id = dept_id) LOOP PIPE ROW(emp); END LOOP; RETURN; END; ``` 在这个函数中,我们使用 `PIPELINED` 关键字,表示该函数返回一组行,而不是单个值。然后我们使用 `FOR` 循环来逐行处理数据,并且通过 `PIPE ROW` 命令返回一行数据。最后,我们使用 `RETURN` 命令来结束函数的执行,并且返回一组行。调用该函数时,可以像普通的表一样使用,例如: ``` SELECT * FROM TABLE(get_employee_list(10)); ``` 这将返回部门编号为 10 的所有员工的姓名和薪水。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值