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

请喊各位,有没有一个类似于一种累积的聚合函数

2012-12-26 
请叫各位,有没有一个类似于一种累积的聚合函数emp:idnamedepart,1scott12tiger13manager 1比方说,select s

请叫各位,有没有一个类似于一种累积的聚合函数
emp:
  id 
  name
  depart,

1   scott   1
2   tiger   1
3   manager 1

比方说,select str_link(t.name) from emp t where t.depart = 1,
我要查出来的结果是scott,tiger,manager。搜了半天google,不知道怎么用关键字,看各位有么有遇到有这种需求的。


[最优解释]

引用:
引用:SQL code123456select deptno,wm_concat(ename) from emp group by deptno;DEPTNO WM_CONCAT(ENAME)------ -----------------------------……

应该不是系统自带的,没见过,系统自带的也不会让你看源码了,一般加密过的
[其他解释]
 ',' 
[其他解释]
 value;

    END IF;
    RETURN ODCICONST.SUCCESS;
  END;

  MEMBER FUNCTION ODCIAggregateTerminate (
    self IN strlink,
    value OUT VARCHAR2,
    flags IN NUMBER
  )
    RETURN NUMBER
  IS
  BEGIN
    value := self.str;
    RETURN ODCICONST.SUCCESS;
  END;

  MEMBER FUNCTION ODCIAggregateMerge (
    self IN OUT strlink,
    ctx2 IN STRLINK
  )
    RETURN NUMBER
  IS
  BEGIN
    NULL;
    RETURN ODCICONST.SUCCESS;
  END;
END;


[其他解释]
select deptno,wm_concat(ename) from emp group by deptno;
DEPTNO WM_CONCAT(ENAME)
------ --------------------------------------------
    10 CLARK,KING,MILLER
    20 SMITH,FORD,ADAMS,SCOTT,JONES
    30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD

[其他解释]
引用:
SQL code123456select deptno,wm_concat(ename) from emp group by deptno;DEPTNO WM_CONCAT(ENAME)------ --------------------------------------------    10 ……

恩,这个是可以的,请教一下,我刚刚贴的那个函数str_link是系统自带的吗?

[其他解释]
引用:
报错可能是你的记录太多,拼出来的字符串太长了,或你变量定的太小


呵呵,是我写sql太大意了,我引用内层循环的变量名字和外层循环判断的字段相同,我改了内层变量名就可以了。
如下:
select city,(
select ***
from table a
where a.city = city)
from (
city,xxxxxxxxxxxxxxxxxxxx
),

重点出错在select ***
from table a
where a.city = city,这会导致死循环,然后,我把内层的city改为citya,然后内层改为
select ***
from table a
where a.city = citya,然后就可以了。
------其他解决方案--------------------


用到公司有一个函数,就是str_link,可能查询的数量巨大,报:字符的缓冲区太小,我不知道这个函数,是oracle自带的,还是,同事写的,我贴上来,给各位看看:


CREATE OR REPLACE TYPE BODY SYS.strlink IS
  STATIC FUNCTION ODCIAggregateInitialize (
    sctx IN OUT strlink
  )
    RETURN NUMBER
  IS
  BEGIN
    sctx := strlink(NULL);
    RETURN ODCICONST.SUCCESS;
  END;

  MEMBER FUNCTION ODCIAggregateIterate (
    self IN OUT STRLINK,
    value IN VARCHAR2
  )
    RETURN NUMBER
  IS
  BEGIN
    IF self.str IS NULL THEN
      self.str := value;
    ELSE
      self.str := self.str 
[其他解释]
报错可能是你的记录太多,拼出来的字符串太长了,或你变量定的太小
[其他解释]
select depart,wm_concat(name)
from emp
group by depart

热点排行