首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

函数返回不确定列数的表结构,怎么实现

2013-08-01 
函数返回不确定列数的表结构,如何实现写了一个行转列的函数,要转换的列的个数是根据参数传进去的,所以返回

函数返回不确定列数的表结构,如何实现
写了一个行转列的函数,要转换的列的个数是根据参数传进去的,所以返回的结果集的列数不确定。

最终的使用要这样:
select  u.name,p.* from 主表 u, 
f_row2colum('列1,列2,列3...') p ---函数
where u.id = p.user_id and u.id='1'

希望函数的返回结果可以直接当作表来查询。

从网上看大概两种方式
一是返回值用洲标,如果用游标的话,好像不能满足我上面的查询方式。
二是自定义TYPE,由于不确定列数,也没有法定义。

还有我想直接把函数里拼好的SQL文返回出来,但是也没法拼到上面的查询执行。

大神们谁有好的办法,请指教。
[解决办法]

引用:
希望函数的返回结果可以直接当作表来查询。
--可以使用管道函数(pipelined function).   


说错了,列不确定,管道也不行。


不过这个行转不定列网上好像有专门写好的函数。
[解决办法]
    CREATE OR REPLACE
    type PivotImpl as object
    (
      ret_type anytype,      -- The return type of the table function
      stmt varchar2(32767),
      fmt  varchar2(32767),
      cur integer,
      static function ODCITableDescribe( rtype out anytype, p_stmt in varchar2, p_fmt in varchar2 := 'upper(@p@)', dummy in number := 0 )
      return number,
      static function ODCITablePrepare( sctx out PivotImpl, ti in sys.ODCITabFuncInfo, p_stmt in varchar2, p_fmt in varchar2 := 'upper(@p@)', dummy in number := 0 )
      return number,
      static function ODCITableStart( sctx in out PivotImpl, p_stmt in varchar2, p_fmt in varchar2 := 'upper(@p@)', dummy in number := 0 )
      return number,
      member function ODCITableFetch( self in out PivotImpl, nrows in number, outset out anydataset )


      return number,
      member function ODCITableClose( self in PivotImpl )
      return number
    )
    /


这是国外某人06年写的自实现行转列函数。
[解决办法]
http://www.cnblogs.com/QQParadise/articles/1712093.html

看下这个是否可以。。。。
4#的有点复杂,哈,需要仔细看
[解决办法]
引用:
写了一个行转列的函数,要转换的列的个数是根据参数传进去的,所以返回的结果集的列数不确定。

最终的使用要这样:
select  u.name,p.* from 主表 u, 
f_row2colum('列1,列2,列3...') p ---函数
where u.id = p.user_id and u.id='1'

希望函数的返回结果可以直接当作表来查询。

从网上看大概两种方式
一是返回值用洲标,如果用游标的话,好像不能满足我上面的查询方式。
二是自定义TYPE,由于不确定列数,也没有法定义。

还有我想直接把函数里拼好的SQL文返回出来,但是也没法拼到上面的查询执行。

大神们谁有好的办法,请指教。


参考 expert one-on-one Oracle  《Oracle 专家高级编程》 中关于行转列范例。 网上有PDF可以下载
[解决办法]
引用:
Quote: 引用:

写了一个行转列的函数,要转换的列的个数是根据参数传进去的,所以返回的结果集的列数不确定。

最终的使用要这样:
select  u.name,p.* from 主表 u, 
f_row2colum('列1,列2,列3...') p ---函数
where u.id = p.user_id and u.id='1'

希望函数的返回结果可以直接当作表来查询。

从网上看大概两种方式
一是返回值用洲标,如果用游标的话,好像不能满足我上面的查询方式。
二是自定义TYPE,由于不确定列数,也没有法定义。

还有我想直接把函数里拼好的SQL文返回出来,但是也没法拼到上面的查询执行。

大神们谁有好的办法,请指教。


参考 expert one-on-one Oracle  《Oracle 专家高级编程》 中关于行转列范例。 网上有PDF可以下载


Are you sure???
[解决办法]
哈哈。我有个损招儿: 跟用户协商出来的数据需要在EXCEL中手动调整,看看是否接受?(出于成本考虑)
拍砖吧!

热点排行