能否自己写一个类似sum的函数用法也一样,这个函数是sumstr()里面传的字段类型为varchar2,功能是把分组中的字符串用逗号连成串eg.
select a,b from t
a b
- -
1 a1
1 a1
2 b2
2 b3select a,sumstr(b) b from t
a b
- -
1 a1,a2
2 b2,b3
select a,b from t
a b
- -
1 a1
1 a1
2 b2
2 b3select a,sumstr(b) b from t
a b
- -
1 a1,a2
2 b2,b3
解决方案 »
- 存储过程调用外部函数的问题
- ORA-01861: literal does not match format string
- 导表问题,急!
- 【求助】使用occi连接数据库时出错:ORA-12537:TNS:connection closed
- 那里有oracle的SQL、函数的手册?用oracle帮助不好使用!
- 异常处理:分数高高
- 在Oracle中VARCHAR2型字段最多能保存多少个汉字?现在定义VARCHAR2(4000)只能保存1000个汉字?
- pl\sql中为何不能调用其他用户中的存储过程
- 进来抢分......oracle初学者问题!
- 有关Oracle的实时数据库
- 100分急求解决方案
- 一个关于sql语法的问题
大家帮忙了!!!
8i里没有sys_connect_by_path,你说的sumstr函数不知道怎么做,学习。
如
c1 c2
--------------
1 我
1 是
1 谁
2 知
2 道
3 不
……
转换为
1 我是谁
2 知道
3 不
这一类型的转换必须借助于PL/SQL来完成,这里给一个例子
CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
RETURN VARCHAR2
IS
Col_c2 VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP
Col_c2 := Col_c2||cur.c2;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
END;
/
SQL> select distinct c1 ,get_c2(c1) cc2 from table;即可
FUNCTION GET_C2 (
tmp_c1 NUMBER, --第一列字段值
col_c1 VARCHAR2, --第一列字段名
col_c2 VARCHAR2, --第二列字段名
tab_name VARCHAR2 --表名
)
RETURN VARCHAR2
IS
type rc is ref cursor;
cur rc;
strsql VARCHAR2 (4000);
col_tmp VARCHAR2 (4000);
col_c VARCHAR2 (4000);
BEGIN
strsql :=
'select '
|| col_c2
|| ' from '
|| tab_name
|| ' where '
|| col_c1
|| '='
|| tmp_c1; open cur for strsql;
LOOP
fetch cur into col_tmp;
exit when cur%notfound;
col_c := col_c || ',' || col_tmp;
END LOOP;
col_c := substr(col_c, 2,length(col_c));
RETURN col_c;
END;
缺点:参数太多,调用起来麻烦。像楼主说的只用一个参数的那种不知道怎么写。
在函数里用动态Sql