Oracle管道函数示例

本文深入解析了Oracle中管道函数的实现,包括Record/ObjectType、TableType和Function的定义与使用,通过示例展示了如何在包内创建和调用管道函数,并强调了ObjectType在外部定义的重要性。

Oracle的管道函数需要定义下面的三样:

Record/Object Type:定义一个Record或Object类型的变量,这个变量用于表示返回结果集的一行数据,有点像C#中的DataRow类。

Table Type:定义一个集合类型,这个类型由Record/Object Type填充。这个类型也可以理解为一个Record/Object的数组。

Function:定义个返回类型为Table Type的函数。这个函数负责生成结果集。

上述三个数据库对象一般定义在一个包内,但是Object Type不能定义在包内,需要在包外部定义,包内引用。

 

示例:

 1 CREATE OR REPLACE PACKAGE PCK_TEST AS
 2 
 3 TYPE TYPE_TEST IS RECORD
 4 (
 5   R_VAL         NUMBER,
 6   DATE_VALUE    DATE,
 7   TEST_FIELD    VARCHAR2(50 BYTE)
 8 );
 9 
10 TYPE TABLE_TEST IS TABLE OF TYPE_TEST;
11 
12 FUNCTION F_TEST_TABLE(P_DATE IN VARCHAR2) RETURN TABLE_TEST PIPELINED;
13 
14 END PCK_TEST;
 1 CREATE OR REPLACE PACKAGE BODY PCK_TEST AS
 2 
 3 FUNCTION F_TEST_TABLE(P_DATE IN VARCHAR2) RETURN TABLE_TEST PIPELINED IS
 4 
 5   L_ROW   TYPE_TEST;
 6   
 7 BEGIN
 8 
 9   FOR I IN 1..10
10   LOOP
11     
12     L_ROW.R_VAL := I;
13     L_ROW.DATE_VALUE := TO_DATE(P_DATE,'YYYY-MM-DD HH24:MI:SS');
14     L_ROW.TEST_FIELD := 'TEST';
15     ---如果TYPE_TEST定义为Object类型,则可以这么赋值
16     ---L_ROW := TYPE_TEST(I,TO_DATE(P_DATE,'YYYY-MM-DD HH24:MI:SS'),'TEST')
17     PIPE ROW(L_ROW);
18     
19     
20   END LOOP;
21   RETURN;
22 
23 EXCEPTION
24   --YOUR EXCEPTION SQL STATEMENT
25   WHEN OTHERS THEN RETURN;
26 END F_TEST_TABLE;
27 
28 
29 END PCK_TEST;

 

调用函数:

调用时需要与Table关键字配合使用,如下图所示。

转载于:https://www.cnblogs.com/shenyuelan/p/3317930.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值