oracle函数 rows,Oracle自定义函数——f_henry_ConcatRowsByColumn

Create Table henry_test (a varchar2(10),b int);

Insert Into henry_test values ('aa',1);

Insert Into henry_test values ('bb',1);

Insert Into henry_test values ('cc',1);

Insert Into henry_test values ('dd',2);

Insert Into henry_test values ('ee',2);

Insert Into henry_test values ('ff',3);

Insert Into henry_test values ('gg',3);

Insert Into henry_test values ('hh',3);

Commit;

/*

SQL> select * from henry_test;

A                                                B

---------- ---------------------------------------

aa                                               1

bb                                               1

cc                                               1

dd                                               2

ee                                               2

ff                                               3

gg                                               3

hh                                               3

8 rows selected

*/

create or replace function f_henry_ConcatRowsByColumn(

Column2Value in Varchar2,  --分组该列的值

ColumnName1 in Varchar2,  --要连接的列名

ColumnName2 in Varchar2,  --用来做分组依据的列名

TableName  in Varchar2  --表名

)

return varchar2 is

v_Result varchar2(32767);

type cur_type is ref cursor;

myCur cur_type;

v_Column1Value varchar2(4000);

begin

Open myCur for 'Select '||ColumnName1||' From '||TableName||' Where '||ColumnName2||' = '||Column2Value;

Loop

Fetch myCur Into v_Column1Value;

Exit When myCur%notfound;

v_Result:=v_Result||v_Column1Value||',';

End Loop;

Close myCur;

return(v_Result);

end f_henry_ConcatRowsByColumn;

/*

SQL> select B,f_henry_ConcatRowsByColumn(B,'A','B','henry_test') from henry_test group by B;

B F_HENRY_CONCATROWSBYCOLUMN(B,'

--------------------------------------- --------------------------------------------------

1 aa,bb,cc,

2 dd,ee,

3 ff,gg,hh,*/

Drop Table henry_test;

/*上面的操作仅限于一张表内。*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值