现有项目需要把oracle转成PostgreSQL,
比如现有table及数据如下:>>表A
depid        useridd1           1111
d1           2222
d1           3333
d2           4444
d2           5555
d2           6666在oracle中可以自定义一个数值型table的type,
然后通过cast ( multiset )的方式得到
类似下面的查询结果。d1           <Collection> // 这里的Collection点开就是3行1列的table,每行值分别为1111,2222,3333
d2           <Collection> // 这里的Collection点开就是3行1列的table,每行值分别为4444,5555,6666现在PostgreSQL中好像没有multiset这个函数,请问各位该如何实现等同于oracle相同的效果。
若没有系统自带的函数能够实现,自定义函数实现亦可,只是要求是要用1条sql语句实现。要实在没有类似oracle中的自定义table的返回形式,返回值变成numeric[]数组也可以。比如:
d1           {1111,2222,3333}
d2           {4444,5555,6666}请熟悉PostgreSQL的各位大侠赐教

解决方案 »

  1.   

    啊哦  我是学MYSQL的 
    数据量很多么?  如果不多 你把数据从oracle中导出成一个表  在PostgreSQL建表了在导进去
    这样应该很快吧
      

  2.   

    mysql有这个函数   sqlserver和pg都没有 需要写函数
    http://blog.csdn.net/starnight_cbj/article/details/7513863
      

  3.   

    我刚查了下,其实用 array(select userid from tablea)
    大概就能满足要求了,看还有没有直接查询成子表而非数组的。
      

  4.   

    就是将
    depid useridd1 1111
    d1 2222
    d1 3333
    d2 4444
    d2 5555
    d2 6666变成:
    1111,2222,3333
    4444,5555,6666?
      

  5.   

    最好变成
    d1 <Collection> // 这里的Collection点开就是3行1列的table,每行值分别为1111,2222,3333
    d2 <Collection> // 这里的Collection点开就是3行1列的table,每行值分别为4444,5555,6666实在不行变成
    d1 {1111,2222,3333}
    d2 {4444,5555,6666}不能单纯的用符号把这几项连接起来,
    因为可能有varchar型,用符号连接可能导致溢出。
      

  6.   

    如果你的版本支持的话,可以试下array_agg()或string_agg()函数。
      

  7.   

    除了UDF、SP外,只有用数组函数
      

  8.   

    除了UDF、SP外,只有用数组函数