- 浏览: 385821 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (314)
- java (132)
- 生活 (13)
- javase模式 (6)
- weblogic (4)
- jquery (5)
- sql (21)
- ecside (1)
- el (3)
- css (5)
- spring (7)
- ireport (2)
- linux (14)
- struts2 (2)
- jstl (1)
- rmi (1)
- rose (9)
- js (6)
- swing (4)
- webservice (1)
- jboss (1)
- ejb3 (2)
- xml (1)
- 线程 (9)
- socket (3)
- jms (2)
- tomcat (10)
- 领域驱动 (3)
- json (3)
- 权限 (2)
- jvm (1)
- 书籍 (1)
- eclipse RCP (0)
- 数据库设计 (10)
- 软件分析建模 (5)
- 分析建模 (3)
- hibernate jpa (5)
- Java 获取系统信息,包括CPU使用率、硬盘大小、网卡状态、系统信息等 (1)
- 项目管理 (2)
- 财务 (0)
- oracle (2)
- 需求 (2)
- rcp gef (0)
- c++ (1)
- hadoop (2)
- BIGDATA (3)
- c (6)
最新评论
-
lh_kevin:
...
jpa 注解 -
一别梦心:
你好,我也遇到此问题了。就你贴的那段代码,你说了两种解决方式, ...
Hibernate的Antlr在Weblogic中产生Jar冲突的历史缘故以及解决办法 -
fireinjava:
...
el表达式 -
宋建勇:
...
JSON: property "xxx" has no getter method in class "..." -
handawei:
有道理,jpa是orm框架的java标准,它关注的是对象到关系 ...
jpa 注解
zhuan:http://blog.csdn.net/lqh4188/article/details/7498354
在使用Union all连接时,若A集合中某列为nvarchar2或nvarchar类型,而B集合中无此列,用‘ ’ 来代替是会报字符集不匹配,解决方法有两种,见下面的示例
例:
- select '中国','China',cast('中国' as nvarchar2(10)) T
- from dual
- union all
- select '美国','USA',''
- from dual;
select '中国','China',cast('中国' as nvarchar2(10)) T from dual union all select '美国','USA','' from dual;
如上,T的类型为nvarchar2,长度为10,如果直接这样查询,就会报字符集不匹配,那么怎么来处理呢,可通过两种方法来解决
1.to_char()
- select '中国','China',to_char(cast('中国' as nvarchar2(10))) T
- from dual
- union all
- select '美国','USA',''
- from dual;
select '中国','China',to_char(cast('中国' as nvarchar2(10))) T from dual union all select '美国','USA','' from dual;
2. 用N' ',N''是将‘’转换为Unicode编码
- select '中国','China',cast('中国' as nvarchar2(10)) T
- from dual
- union all
- select '美国','USA',N''
- from dual;
select '中国','China',cast('中国' as nvarchar2(10)) T from dual union all select '美国','USA',N'' from dual;
这样就可以解决字符集不匹配问题了
-----------------------
oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_concat(column)函数实现字段合并,如果您对oracle wm_concat(column)函数使用方面感兴趣的话,不妨一看。
shopping:
-----------------------------------------
u_id goods num
------------------------------------------
1 苹果 2
2 梨子 5
1 西瓜 4
3 葡萄 1
3 香蕉 1
1 橘子 3
=======================
想要的结果为:
--------------------------------
u_id goods_sum
____________________
1 苹果,西瓜,橘子
2 梨子
3 葡萄,香蕉
---------------------------------
- select u_id, wmsys.wm_concat(goods) goods_sum
- from shopping
- group by u_id
想要的结果2:
--------------------------------
u_id goods_sum
____________________
1 苹果(2斤),西瓜(4斤),橘子(3斤)
2 梨子(5斤)
3 葡萄(1斤),香蕉(1斤)
---------------------------------
使用oracle wm_concat(column)函数实现:
- select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum
- from shopping
- group by u_id
------------------------
oracle 多行结果集合并成为一行
今天做数据统计工作遇到这个问题,当一个查询返回结果是多行时,不能直接进行更新操作,需要将结果集合并,找了半天,终于豁然开朗……
如果是oracle 10g以上 一个wm_concat函数就可以解决。
如果是oracle 9i以下就有点麻烦了。
表结构如下:
NAME Null Type
------------------------ --------- -----
N_SEC_CODE NOT NULL CHAR(6)
C_RESEARCHER_CODE NOT NULL VARCHAR2(20)
此表保存了“股票”与“研究员”的对应关系数据,一般而言,对于同一只股票而言,可能有多个研究员
对其进行跟踪研究。所以目前遇到一个要求,需查询出每只股票和对应的研究员(研究员代码间,使用逗号分隔)。
例如有如下数据:
000297 chenpeng
000297 liusu
合并处理后需显示为:
000297 chenpeng,liusu
网上查了很多方法,但通常而言都是编写自定义多行文本合并函数,或者对支持的列数具有局限性。
最后在英文google中搜到如下比较巧的方法。不用在数据库中增加function,纯SQL一次性搞定,
而且扩充性很好,没有列的限制。
Code
SELECT n_sec_code, TRANSLATE (LTRIM (text, '/'), '*/', '*,') researcherList
FROM (SELECT ROW_NUMBER () OVER (PARTITION BY n_sec_code ORDER BY n_sec_code,
lvl DESC) rn,
n_sec_code, text
FROM (SELECT n_sec_code, LEVEL lvl,
SYS_CONNECT_BY_PATH (c_researcher_code,'/') text
FROM (SELECT n_sec_code, c_researcher_code as c_researcher_code,
ROW_NUMBER () OVER (PARTITION BY n_sec_code ORDER BY n_sec_code,c_researcher_code) x
FROM m_researcher_stock_rel
ORDER BY n_sec_code, c_researcher_code) a
CONNECT BY n_sec_code = PRIOR n_sec_code AND x - 1 = PRIOR x))
WHERE rn = 1
ORDER BY n_sec_code;
预想的结果成功出现,多行数据成功汇总到一行,特此分享与大家。对于你自己的应用中,只需要把SQL中“n_sec_code”
换为你的用来汇总的列,“c_researcher_code”替换为需合并文本的列,“m_researcher_stock_rel”替换为你的表名,就是这么简单。
SQL分析:
1、利用 “ROW_NUMBER () OVER (PARTITION BY……” 为按“股票代码”汇总后的数据行添加组内序号
2、“SYS_CONNECT_BY_PATH” 按组内序号相邻关系,为每一层进行不同行的“研究员代码”叠加
3、再次利用“股票代码”进行组内分组,但按第二部中的层次排倒序,增加调整后等级
4、取所有调整后等级为1的结果,即为所要求的数据行
方法很巧妙,值得学习。:-)
感谢网友@OctoberOne、@ericqliu的指点,在ORACLE10中可使用以下方法:
SELECT n_sec_code, wmsys.wm_concat (c_researcher_code) as result
FROM m_researcher_stock_rel
GROUP BY n_sec_code
又一个示例:
WITH tab AS(
select '01' no,'ss' name, 10 jiner,'麦子' you from dual union all
select '02' no,'dd' name, 11 jiner,'萝卜' you from dual union all
select '03' no,'cc' name, 9 jiner,'大豆' you from dual union all
select '01' no,'ss' name, 10 jiner,'白菜' you from dual)
SELECT a.no, a.name, a.jiner, ltrim(MAX(sys_connect_by_path(you, ',')), ',') you
FROM (SELECT row_number() over(PARTITION BY a.no, a.name, a.jiner
ORDER BY a.no, a.name, a.jiner) rn,a.*
FROM tab a) a
START WITH rn = 1
CONNECT BY PRIOR rn = rn - 1 AND
a.no = PRIOR a.no AND
a.name = PRIOR a.name AND
a.jiner = PRIOR a.jiner
GROUP BY a.no, a.name, a.jiner
发表评论
-
oracle解锁
2012-06-19 17:04 794查看锁表进程SQL语句1: select sess.sid, ... -
Oracle集合操作函数:Union、Intersect、Minus
2012-02-17 16:19 1290集合操作不适用于LOB,Varray和潜逃表列 Unio ... -
Merge用法:Oracle 10g中对Merge语句的增强
2012-02-17 16:05 1100Merge用 ... -
数据库优化
2011-12-19 14:17 858转:http://www.iteye.com/topic/11 ... -
导入导出,创建databaselink
2011-08-10 15:56 2124pl/sql导出表结构和表 ... -
oracle改错
2011-02-09 12:19 1375系统运行了一段时间 ... -
dba常用sql
2010-12-16 17:19 11721. 查看表空间的名称及大小 select t.tablesp ... -
Oracle语句优化53个规则详解(转载)
2010-12-15 11:41 861Oracle语句优化53个规则 ... -
表修改
2010-11-17 23:12 839使用 字符串中使用’ Insert into product ... -
报表函数
2010-11-17 22:06 795报表函数: 总计: select 1 ,t.month ... -
窗口函数
2010-11-16 21:32 1020为计算一定的范围的累积和移动平均值,可以结合聚合函数使用:su ... -
orace评级函数
2010-11-15 22:35 1075cume_dist(): 功能描述:计算一行在组中的相对位置 ... -
orace评级函数
2010-11-14 23:43 920rank() over (order by XX): /* ... -
orcel sql 技巧
2010-11-14 23:05 1442转载:http://www.iteye.com/topic/8 ... -
oracle
2010-10-11 10:17 759今天没事来说说oracle性能优化的技巧。。 1.选用适合的 ... -
sql优化设定
2010-09-02 10:41 866select /*+RULE*/ m.daterunid ... -
ORACLE 中IN和EXISTS比较
2010-08-23 09:49 641EXISTS的执行流程 select * from ... -
rank over pation
2010-08-11 11:11 1240排列(rank())函数。这些排列函数提供了定义一个集合(使用 ... -
group
2010-05-30 16:50 775select t.startstncode ,sum ... -
查询优化
2010-04-08 10:14 1102一、SQL语句优化:1: exists ...
相关推荐
2. **字符集设置不当**:如果数据库服务器的字符集设置与客户端的应用程序或操作系统使用的字符集不匹配,也可能引发此错误。 3. **数据输入错误**:人为地将超过字段长度限制的多字节字符输入到VARCHAR2字段中。 ...
### ora-01033: Oracle Initialization or Shutdown in Progress 解决方法 #### 一、问题背景及原因 **标题**: “ora-01033: Oracle initialization or shutdown in progress 解决方法” **描述**: “ora-01033: ...
-- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... -- 解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 的文件包....... ...
在Oracle数据库中,CLOB(Character Large Object)字段类型用于存储大量的文本数据,如XML文档、长篇文章或者大量字符数据。...通过上述策略,你可以成功地处理超过4000字符限制的问题,从而避免“ORA-01704”错误。
ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...
ORA-32001:write to spfile requested but no spfile is in use请求写入spfile,但没有使用spfile的解决方法 在输入以下语句中报了这样的错误: SQL>alter system set control_files=’/u01/app/oracle/oradata/prod/...
在Oracle数据库管理中,"ORA-...通过理解和掌握这些知识点,您可以有效地解决“ORA-00990: 权限缺失或无效”的问题,并更好地管理Oracle数据库中的权限分配。记住,权限管理是数据库安全的重要组成部分,必须谨慎处理。
ORA-12154: TNS: 无法解析指定的连接标识符的解决方法
ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程;无法转换...
在Oracle数据库中,"ORA-00904"是一个常见的错误代码,它表示尝试引用一个不存在或无效的标识符。在这个场景下,错误信息提到的是"WM_CONCAT"函数,这表明在Oracle 19c数据库环境中,用户尝试使用WM_CONCAT函数,但...
当尝试使用Kettle连接Oracle 12c时,可能会遇到错误"ORA-28040:没有匹配的验证协议"。这个错误通常意味着客户端和服务器之间的安全认证不兼容。 **ORA-28040错误的解释:** 此错误通常出现在Oracle数据库服务器...
在Oracle数据库系统中,"ORA-01036:非法的变量名/编号"是一个常见的错误,通常出现在PL/SQL代码或者SQL查询语句中,当你尝试使用一个不正确或者未定义的变量时,Oracle数据库会抛出这个错误。这个错误可能是由于...
NULL 博文链接:https://snowelf.iteye.com/blog/507976
在Oracle数据库系统中,"ORA-00060: 等待资源时检测到死锁" 是一个常见的错误提示,它表明两个或多个事务在执行过程中陷入了无法继续进行的状态,因为彼此都在等待对方释放资源。这种情况通常发生在并发操作中,比如...
在oracle里面运行一下,解决Exception java.sql.SQLException ORA-00600 内部错误代码
oracle12c程序连接时异常: ORA-01017: 用户名/口令无效; 登录被拒绝 的解决方案。
#### ORA-00001: Unique Constraint Violated 当尝试插入或更新违反唯一约束的数据时触发此错误。例如,在具有唯一索引的列上插入重复数据。 #### ORA-00017: Rollback Segment Full 在进行事务回滚操作时,如果...
NULL 博文链接:https://springlin.iteye.com/blog/1520668
在处理Oracle数据库时,我们经常遇到错误代码ORA-00031,它表明指定的会话已经被标记为终止。这个错误通常与数据库锁定和会话管理有关。本文将详细解析这一问题的解决方案,并提供一系列SQL语句和命令来处理和解决...