Oracle多行记录合并/连接/聚合字符串的几种方法
什么是合并多行字符串(连接字符串)呢,例如:
SQL> desc test;
Name Type Nullable Default Comments
------- ------------ -------- ------- --------
COUNTRY VARCHAR2(20) Y
CITY VARCHAR2(20) Y
SQL> select * from test;
COUNTRY CITY
-------------------- --------------------
中国 台北
中国 香港
中国 上海
日本 东京
日本 大阪
要求得到如下结果集:
------- --------------------
中国 台北,香港,上海
日本 东京,大阪
实际就是对字符实现一个聚合功能,我很奇怪为什么Oracle没有提供官方的聚合函数来实现它呢:)
下面就对几种经常提及的解决方案进行分析(有一个评测标准最高★★★★★):
1.被集合字段范围小且固定型 灵活性★ 性能★★★★ 难度 ★
这种方法的原理在于你已经知道CITY字段的值有几种,且还不算太多,如果太多这个SQL就会相当的
长。。看例子:
SQL> select t.country,
2 MAX(decode(t.city,'
相关文档:
要创建两个文件
1: runBatch.bat
2: sql.txt
runBatch.bat 内容如下:
sqlplus username/password @sql.txt
pause
sql.txt内容如下:
spool sql.log
create table t1(cname char(20));
insert into t1(cname) values('test');
select * from t1;
spool off
exit
双击runBatch.bat就可以批量执行sql.txt中 ......
字符函数
下面是Oracle支持的字符函数和它们的Microsoft SQL Server等价函数。
函数 Oracle Microsoft SQL Server
把字符转换为ASCII :ASCII ASCII
字串连接: CONCAT --------------(expression + expression)
把ASCII转换为字符 CHR, CHAR
返回字符串中的开始字符(左起) INSTR ,---------------CHARINDEX
......
Oracle 存储过程返回结果集用 ref cursor 实现。试验步骤如下:
1. 建立 ref cursor 类型和过程
CREATE OR REPLACE PACKAGE types
AS
TYPE ref_cursor IS REF CURSOR;
END;
/
CREATE TABLE STOCK_PRICES(
RIC VARCHAR(6) PRIMARY KEY,
PRICE NUMBER(7,2 ......
今天碰到一个问题,通过一个SQL语句查询时,出如下问题:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "WMSYS.WM_CONCAT_IMPL", line 30
问题出现在通过WMSYS. ......
----本用户所拥有的系统权限:
select * from user_sys_privs;
---本用户读取其他用户对象的权限:
select * from user_tab_privs;
-----添加权限
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE&nbs ......