- 浏览: 768926 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (256)
- ssh (18)
- webservice (8)
- java基础 (38)
- j2EE方方面面 (17)
- 随意涂鸭!呵呵 (2)
- 数据库 (22)
- work (10)
- XML与XML解析 (9)
- 测试 (2)
- sso (1)
- ldap (6)
- java 模板技术 (4)
- 版本管理 (1)
- 每日小点滴 (26)
- javascript (26)
- Jakarta Commons (2)
- css (6)
- 设计 (3)
- Eclipse插件开发 (3)
- BAP (3)
- web控件 (2)
- java加密解密 (4)
- 调优 (6)
- 界面技术 (3)
- java多线程 (6)
- 互联网 (2)
- 日志管理 (4)
- java调度 (3)
- rest (0)
- Python (2)
- mobile (2)
- 2016的故事 (4)
- Docker (1)
- NOSQL_Hadoop (0)
最新评论
-
promiseloney:
这个女程序员厉害了。。。
JVM调优:GC 参数 -
zxjlwt:
可以通过WebService上传一个文件吗?素人派http:/ ...
webservice传送XML大小估算 -
liaoshaoyang:
写的不错嘛 可以做参考
权限管理设计一 -
aaaaaaaaabaas:
谢谢,对我有帮助
Apache Commons Configuration使用入门 -
Jack_Wilshere:
com.smartdot.pdm.business.corp. ...
java导出txt
一、最原始的表说明
CREATE TABLE DATADIC ( DATAID NUMBER NOT NULL, NAME VARCHAR2(100 BYTE), VALUE VARCHAR2(100 BYTE), PARENTID NUMBER, SEQUENCE NUMBER, DESCRIPTION VARCHAR2(1000 BYTE) )
datadic 是一张树状的数据字典表,dataId:主键 value:对应的值 parentId:父节点的主键
使用select * from datadic 查询完数据对应的值如下:
约定:根的id为0,可以看到根下面有两条记录,分别行业数据,政务数据。
版次及其他版本形式下面有九个子节点,也就是九条根据,分别为3版、1 版、2版……增订本、2版(修订本)
要实现的最终效果是:
parentID(父节点id) parentValue(父节点值) childvalue(子节点值)
0 根 行业数据*政务数据
…… …… ……
140 版次及其他版本形式 3版*1 版*2版……增订本*2版(修订本)
二、取按照parentid分组,组内部按照dataid排序后的行号
select t.parentid, t.value, t.dataid, (row_number() /* 按照parentid分组,组内部按照dataid排序后的行号*/ over(partition by parentid order by dataid) ) numid from datadic t
查询后的记录集如下:
这个记录表示,parentId为0的记录有6条,numid就是按照parentId分组后按照dataid排序后的rownum.
重点函数:row_number() over(partition by 分组列 order by 排序列)
还有相关的函数:
rank() over(partition by 分组列 order by 排序列) :和名次一样,并列2个之后是第三名
densrank() over(partition by 分组列 order by 排序列) :连续顺序,有2个第二名,仍然跟前第三名。
三、按照上面的行号进行轮循,进行组内每行字符串的连接。
select parentid, parentValue, ltrim(sys_connect_by_path(value, '*'), '*') valuues from (select t.parentid, t.value, t.dataid, parent.VALUE as parentValue, (row_number() /* 按照parentid分组,组内部按照dataid排序后的行号*/ over(partition by t.parentid order by t.dataid) ) numid from bap_datadic t,bap_datadic parent where t.PARENTID=parent.DATAID ) WHERE connect_by_isleaf = 1 start with numid = 1 connect by numid - 1 = prior numid and parentid = prior parentid;
查询结果如下,可以看到显示父节点id、父节点值、父节点下所有子节点的值。
重点函数:sys_connect_by_path(value, '*')
value表示要连接的字段,‘*’表示连接符。
使用这个方法之前必须在where条件中构建树
where start with 条件1 connect by prior 条件2
条件1 :表示起始条件,例如,起始条件为组内排序后的rownum为1。
条件2 :表示要连接的下一行与上一行的关系,例如上面第一记录,valuues 对应的值是:“出版行业*版权行业”。那么“版权行业”与“出版行业”之间的关系是:相同的parentId中的numid+1,所以其条件为:
start with numid = 1
connect by numid - 1 = prior numid and parentid = prior parentid;
其中,prior.列名:代表上一行的列。
SYS_CONNECT_BY_PATH :实现将从父节点到当前行内容以“path”或者层次元素列表的形式显示出来
CONNECT_BY_ROOT: 它用在列名之前用于返回当前层的根节点
connect_by_isleaf:来判断当前行是不是叶子。如 果是叶子就会在伪列中显示“1”,如果不是叶子而是一个分支(例如当前内容是其他行的父亲)就显示“0”。
CONNECT_BY_ISCYCLE:Oracle 10g 之前的版本中,如果在你的树中出现了环状循环(如一个孩子节点引用一个父亲节点),Oracle 就会报出一个错误提示:“ ORA-01436: CONNECT BY loop in user data”。如果不删掉对父亲的引用就无法执行查询操作。而在 Oracle 10g 中,只要指定“NOCYCLE”就可以进行任意的查询操作。与这个关键字相关的还有一个伪列——CONNECT_BY_ISCYCLE, 如果在当前行中引用了某个父亲节点的内容并在树中出现了循环,那么该行的伪列中就会显示“1”,否则就显示“0”。
select temp.CASE_ID,ltrim(max(sys_connect_by_path(temp.name,'//')),'//') from ( select asso.CASE_ID as CASE_ID, subject.NAME as name, (row_number() over(partition by asso.CASE_ID order by asso.ID) ) numid from IPMS_SUBJECT_CASE_ASSO asso,IPMS_SUBJECT subject where asso.SUBJECT_ID=subject.ID )temp start with temp.numid=1 connect by temp.CASE_ID=prior temp.CASE_ID and temp.numid-1=prior temp.numid group by temp.CASE_ID
评论
发表评论
-
SQL面试题二
2013-09-03 22:39 1567一道SQL语句面试题,关于group by 表内容: 2 ... -
面试SQL语句
2013-09-03 22:22 10741Get the average salary of e ... -
mysql语法与decode语法的不同
2012-12-07 11:06 1530这两天要把一个系统从oracle上移植到mysql上,顺便简单 ... -
数据库事务转载基础二:MySQL事务隔离级别详解
2012-06-19 13:01 868SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定 ... -
数据库事务转载基础二:oracle事务隔离级别
2012-06-19 12:57 877Oracle 支持的 2 种事务隔离级别 Read commi ... -
数据库事务转载基础一:oarcle事务
2012-06-19 12:48 1014Oracle事务 2010-11-29 14:22 ... -
数据库实现列值合并为行
2011-10-21 14:17 1171转载自:http://hi.baidu.com/wangz ... -
oracle rownum 学习
2010-10-09 13:37 2825----oracle排序写法 SELECT * FROM ( ... -
oracle 10 TNSLSNR.EXE 占用了8080端口怎么办
2010-02-20 17:51 3905oracle 10服务一启动 TNSLSNR.exe 会占用8 ... -
解决ora-280000 the account is locked
2010-02-20 16:35 4264测试、运行程序时,一般使用服务器上的oracle服务,2010 ... -
oracle 中的几天后,几年后
2009-08-21 15:52 1760首先,需要记住Oracle里面的日期加减是按照天来计算的 ... -
ob 接oracle10时接不上怎么办?
2009-05-04 16:36 12651、打开BDE Administrator。 ... -
Union使用
2009-02-11 14:55 1108select subjectRecordNo as ... -
oracle中判断一个串中是否包含另一个串
2008-12-31 14:32 2715select decode(INSTR('CORPORATEa ... -
sum结果为null时,如果返回值是int型报错
2008-12-01 16:44 1965select nvl(sum(decode(sta ... -
oracle结构设计
2008-11-10 15:21 1253尽管Oracle系统本身已 ... -
Oracle的rownum原理和使用
2008-11-07 11:20 1238俺程序中用到的rownum分页+排序的实现(有机会仔细研究) ... -
oracle10数据库导入导出问题
2008-07-01 15:02 1712ob7.0 不支持oracle10的导入,只可以导出。 toa ... -
oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询
2008-05-26 15:39 10181今天发现在oracle中的select语句可以用START W ... -
Oracle Discover产品简介
2008-03-03 10:50 4211Oracle Discoverer?是Oracle公司面向De ...
相关推荐
行列转换,层级关系,oracle sys_connect_by_path的用法
通过实例比较了 SYS_CONNECT_BY_PATH 和 CONNECT_BY_ROOT 的异同,和返回树形的数据结构
ORACLE中的sys_context函数
今天无意间,看connect by的使用,看到了sys_connect_by_path的用法,算是给我一个另类的惊喜了,sys_connect_by_path(columnname, seperator) 也可以拼出串来,不过这个函数本身不是用来给我们做这个结果集连接用...
Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt
SYS_CONTEXT函数的用法,很好用的东东
Oracle中的USERENV和SYS_CONTEXT范例
ORA-04063: package body SYS.DBMS_REGISTRY_SYS has errors
oracle_课件oracle_课件oracle_课件oracle_课件oracle_课件oracle_课件oracle_课件oracle_课件oracle_课件oracle_课件oracle_课件
Oracle_start_with_connect_by_prior_用法[文].pdf
Oracle_审计表_sys.aud$_授权给用户Truncate权限
很多场合我们都会用到...sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,’,’)。这个
oracle中的数查询,介绍的详细,有例子。
java连接oracle数据库的一个代码,,直接复制粘贴就能用
oracle_instantclient_19_3_windows_x64_19.3.zip oracle运行环境, 可以解决 charchater 不支持的问题
2、在oracle安装路径(C:\oracle\product\10.2.0\db_1\network\ADMIN)中找tnsnames.ora 复制到C:\Oracle_instant_client_10_2路径下 3、第一次启动plsql,点击取消 设置oracle目录名为C:\Oracle_instant_client_10_2 ...
oracle_11g_R2_client win32 客户端
详解Oracle数据库的db_cache_size和granule_size 摘取了官方文档的描述,用中文进行了分析
本文档为cx_Oracle库使用手册,cx_Oracle库为python连接Oracle的模块