oracle中使用wm_concat函数的方法及弊端(解决办法)
2017-11-11 11:32
405 查看
该函数在10版本推出,可以把列值以英文逗号分隔起来并显示成一行,例子:
1. SQL> create table test(id number,name varchar2(20));
2. SQL> insert into test values(1,'a');
3. SQL> insert into test values(1,'b');
4. SQL> insert into test values(1,'c');
5. SQL> insert into test values(2,'d');
6. SQL> insert into test values(2,'e');
7. SQL> commit;
8. 效果1 : 行转列
9. SQL> select wm_concat(name) from test;
10. WM_CONCAT(NAME)
11. -------------------------------------------------------------------------
12. a,b,c,d,e
13. 效果2: 把结果里的逗号替换成"|"
14. SQL> select replace(wm_concat(name),',','|') from test;
15. REPLACE(WM_CONCAT(NAME),',','|')
16. -----------------------------------------------------------------------
17. a|b|c|d|e
我们经常用TO_CHAR包含转换好的记录,这样可以正常展示成字符串(因为在PL_SQL中只用wm_concat的话可能查出的是BLOB字段)
以上参考地址:http://www.jb51.net/article/37604.htm
重点来了:wm_concat有长度限制或者版本不支持,为了解决这弊端,我们进行重新写一个函数代替
函数名暂且定位TO_STRING
CREATE OR REPLACE FUNCTION "TO_STRING" (table_in in varchar2_table,
delimiter_in in varchar2 default ',')
return varchar2 is
v_idx pls_integer;
v_str varchar2(32767);
v_dlm varchar2(10);
begin
v_idx := table_in.first;
while v_idx is not null loop
v_str := v_str || v_dlm || table_in(v_idx);
v_dlm := delimiter_in;
v_idx := table_in.next(v_idx);
end loop;
return v_str;
end to_string;
上面函数中有个varchar2_table,这个是我们建立在oracle的type
CREATE OR REPLACE TYPE "VARCHAR2_TABLE" as table of varchar2(4000)
代替的用法如下:
select to_char(wm_concat(id))代替为:
select TO_STRING(cast(collect(to_char(id)) as varchar2_table))
1. SQL> create table test(id number,name varchar2(20));
2. SQL> insert into test values(1,'a');
3. SQL> insert into test values(1,'b');
4. SQL> insert into test values(1,'c');
5. SQL> insert into test values(2,'d');
6. SQL> insert into test values(2,'e');
7. SQL> commit;
8. 效果1 : 行转列
9. SQL> select wm_concat(name) from test;
10. WM_CONCAT(NAME)
11. -------------------------------------------------------------------------
12. a,b,c,d,e
13. 效果2: 把结果里的逗号替换成"|"
14. SQL> select replace(wm_concat(name),',','|') from test;
15. REPLACE(WM_CONCAT(NAME),',','|')
16. -----------------------------------------------------------------------
17. a|b|c|d|e
我们经常用TO_CHAR包含转换好的记录,这样可以正常展示成字符串(因为在PL_SQL中只用wm_concat的话可能查出的是BLOB字段)
以上参考地址:http://www.jb51.net/article/37604.htm
重点来了:wm_concat有长度限制或者版本不支持,为了解决这弊端,我们进行重新写一个函数代替
函数名暂且定位TO_STRING
CREATE OR REPLACE FUNCTION "TO_STRING" (table_in in varchar2_table,
delimiter_in in varchar2 default ',')
return varchar2 is
v_idx pls_integer;
v_str varchar2(32767);
v_dlm varchar2(10);
begin
v_idx := table_in.first;
while v_idx is not null loop
v_str := v_str || v_dlm || table_in(v_idx);
v_dlm := delimiter_in;
v_idx := table_in.next(v_idx);
end loop;
return v_str;
end to_string;
上面函数中有个varchar2_table,这个是我们建立在oracle的type
CREATE OR REPLACE TYPE "VARCHAR2_TABLE" as table of varchar2(4000)
代替的用法如下:
select to_char(wm_concat(id))代替为:
select TO_STRING(cast(collect(to_char(id)) as varchar2_table))
相关文章推荐
- wm命令使用方法及LCD显示图标大小不正常时解决办法
- Oracle没有WM_CONCAT函数的解决办法
- wm命令使用方法及LCD显示图标大小不正常时解决办法
- wm命令使用方法及LCD显示图标大小不正常时解决办法
- 查看已安装软件包的方法 and Oracle中文乱码解决办法总结 and Ubuntu12.04下Windows软件的安装(Wine的简单使用)
- VS2005 未使用调试信息生成二进制文件 解决方法 办法
- VC++中使用ADO访问Oracle遇到的问题及解决方法(待续)
- VC6.0下不能自动完成类方法和属性的解决办法(vc6无法使用代码自动完成)
- Win2008 Server环境Oracle使用DBCA建库时提示ORA-12560错误解决办法
- 关于使用super.getHibernateTemplate()中的方法报java.lang.NullPointerException的解决办法
- 使用Oracle连接池错误 Cannot create PoolableConnectionFactory(Io 异常: The Network Adapter could not establish the connection )的解决方法
- 不能正常使用oracle的解决办法(Oracle10g Express 版)
- linux 环境oracle sqlplus下使用退格backspace回删出现^H的解决办法
- oracle 中使用shutdown 后长时间没反应的解决办法
- jdbc thin连接oracle10,setSavepoint方法报错解决办法
- [记录]在Linux中Oracle安装成功后,首次启动使用时,会出现的一些问题总结和解决办法
- 使用CString的方法(以及用VC写DLL中"error LNK2005: _DllMain@12 already defined"的解决办法)
- Intellij IDEA 编译时报“使用过时方法”的解决办法
- Java使用Oracle遇到的最大游标超出问题及其解决方法
- Java使用Oracle遇到的最大游标超出问题及其解决方法