oracle的table 函数,关于oracle中table函数的使用

Oracle的表函数允许将查询结果集当作表进行处理,它接受查询语句或游标,输出多行数据,支持并行执行和管道式输出。这种功能在处理复杂信息和大量运算时特别有用。使用步骤包括创建对象类型、嵌套表类型,然后在函数中应用。注意,使用表函数的函数内部不能有DML操作,除非声明为自治事务。
摘要由CSDN通过智能技术生成

使用oracle的table函数,查询函数返回的结果集,就如同查询普通表一样查询返回的结果集。

说明:  1、表函数可接受查询语句或游标作为输入参数,并可输出多行数据。

2、该函数可以平行执行,并可持续输出数据流,被称作管道式输出。

3、应用表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表。

优势:  1、一些复杂的公共信息,但通过建立视图又实现不了,此时可以考虑使用管道输出。

2、涉及运算较多,写个简单SQL实现起来较为麻烦,用table可以实现。

使用步骤:1、创建一个object类型的数据库类型对象(注意:此类型必须定义为数据库对象级别的类型,而不能定义包、函数级别的类型。否则,函数外部代码是无法识别该类型的)。

CREATE OR REPLACE TYPE pay_code_obj_row AS OBJECT (

PAY_APPL_CODE VARCHAR2(100)--付款申请号

);

2、创建一个嵌套表类型的数据酷儿类型对象,该类型也将用作函数中定义的返回类型(注意:此类型也必须定义为数据库对象级别的类型)。

CREATE OR REPLACE TYPE pay_code_table IS TABLE OF pay_code_obj_row;

3、在函数中应用。

create or replace function F_BPC_GET_PAYBILLID(

BUDGET_DEPART_ID in VARCHAR2, --预算使用部门

PAY_BILL_TYPE in NUMBER--支付类别

)

return pay_code_table

as

t_pay_appl_code pay_code_table;

begin

if PAY_BILL_TYPE=51 then

select pay_code_obj_row(a.pay_appl_code) bulk collect

into t_pay_appl_code from T_BPC_BU_NEW_PAY_PAY_D a;

end if;

return t_pay_appl_code;

end F_BPC_GET_PAYBILLID;

小结:使用此函数,在函数中不能包含DML操作。除非在该函数定义为Oracle自治事务,即在声明函数时加上: PRAGMA AUTONOMOUS_TRANSACTION; 并在执行完DML后COMMIT。

原文:https://www.cnblogs.com/cxyad/p/9788330.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值