- 浏览: 778653 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1610一道SQL语句面试题,关于group by 表内容: 2 ... -
面试SQL语句
2013-09-03 22:22 11351Get the average salary of e ... -
mysql语法与decode语法的不同
2012-12-07 11:06 1563这两天要把一个系统从oracle上移植到mysql上,顺便简单 ... -
数据库事务转载基础二:MySQL事务隔离级别详解
2012-06-19 13:01 903SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定 ... -
数据库事务转载基础二:oracle事务隔离级别
2012-06-19 12:57 908Oracle 支持的 2 种事务隔离级别 Read commi ... -
数据库事务转载基础一:oarcle事务
2012-06-19 12:48 1058Oracle事务 2010-11-29 14:22 ... -
数据库实现列值合并为行
2011-10-21 14:17 1206转载自:http://hi.baidu.com/wangz ... -
oracle rownum 学习
2010-10-09 13:37 2864----oracle排序写法 SELECT * FROM ( ... -
oracle 10 TNSLSNR.EXE 占用了8080端口怎么办
2010-02-20 17:51 3945oracle 10服务一启动 TNSLSNR.exe 会占用8 ... -
解决ora-280000 the account is locked
2010-02-20 16:35 4315测试、运行程序时,一般使用服务器上的oracle服务,2010 ... -
oracle 中的几天后,几年后
2009-08-21 15:52 1794首先,需要记住Oracle里面的日期加减是按照天来计算的 ... -
ob 接oracle10时接不上怎么办?
2009-05-04 16:36 12971、打开BDE Administrator。 ... -
Union使用
2009-02-11 14:55 1141select subjectRecordNo as ... -
oracle中判断一个串中是否包含另一个串
2008-12-31 14:32 2779select decode(INSTR('CORPORATEa ... -
sum结果为null时,如果返回值是int型报错
2008-12-01 16:44 2012select nvl(sum(decode(sta ... -
oracle结构设计
2008-11-10 15:21 1274尽管Oracle系统本身已 ... -
Oracle的rownum原理和使用
2008-11-07 11:20 1278俺程序中用到的rownum分页+排序的实现(有机会仔细研究) ... -
oracle10数据库导入导出问题
2008-07-01 15:02 1742ob7.0 不支持oracle10的导入,只可以导出。 toa ... -
oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询
2008-05-26 15:39 10231今天发现在oracle中的select语句可以用START W ... -
Oracle Discover产品简介
2008-03-03 10:50 4236Oracle Discoverer?是Oracle公司面向De ...
相关推荐
行列转换,层级关系,oracle sys_connect_by_path的用法
Oracle 中的 sys_context 函数 sys_context 函数是 Oracle 提供的一个获取环境上下文信息的预定义函数。该函数用来返回一个指定 namespace 下的 parameter 值。该函数可以在 SQL 和 PL/SQL 语言中使用。 sys_...
Oracle的`sys_connect_by_path`函数是一个非常有用的工具,尤其在构建树状结构的数据时。在本文中,我们将深入理解这个函数以及如何将其应用于非树结构的数据以生成所需的结果。 `sys_connect_by_path`函数的基本...
通过实例比较了 SYS_CONNECT_BY_PATH 和 CONNECT_BY_ROOT 的异同,和返回树形的数据结构
### Oracle9.2_SYS_CONTEXT函数详解 在Oracle数据库系统中,`SYS_CONTEXT`函数...在Oracle9.2及后续版本中,熟练掌握`SYS_CONTEXT`函数的使用方法对于任何希望充分利用Oracle数据库强大功能的用户来说都是至关重要的。
Oracle的LOB(CLOB)大字段以及(SYS_LOB$$)清理.txt
使用 START WITH 和 CONNECT BY 子句可以实现 SQL 的层次查询,并且可以使用 SYS_CONNECT_BY_PATH 函数和 CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE 等伪列函数来增强层次查询的能力。
"Oracle中的USERENV和SYS_CONTEXT范例" Oracle中的USERENV和SYS_CONTEXT是两个非常重要的函数,它们都可以用于获取当前会话的信息,例如当前用户、当前实例、当前语言等。 USERENV函数 USERENV函数用于返回当前...
标题中的问题“ORACLE SYS.DBMS_REGISTRY_SYS has errors”指的是在Oracle数据库系统中,系统包BODY `SYS.DBMS_REGISTRY_SYS` 出现错误,导致了一系列的PL/SQL调用失败。这种错误通常与数据库的元数据注册功能有关,...
标题中的"cx_Oracle-7.3.0_oracle_cx_oracle_cx_Oracle7.3对应_python_jupyteror" 提到了一个关键的Python库——cx_Oracle,它是Python与Oracle数据库之间的一个接口,允许Python程序员使用Oracle的全部功能。...
在这个例子中,`SYS_CONNECT_BY_PATH`函数用斜杠(/)分隔了路径中的每一个员工名。 需要注意的是,`CONNECT BY`可能会导致循环引用或无限循环,如果数据存在环状引用(员工A的上级是员工B,而员工B的上级又回到了...
本文将深入探讨如何在Oracle环境中配置和使用Audit功能,包括必要的步骤、参数调整以及实战示例。 #### 配置Audit环境 首先,确保Oracle数据库已经正确安装和运行,并且拥有足够的权限进行参数设置。以下是在...
在Java编程中,连接Oracle数据库是一项基础且重要的任务。Oracle数据库是全球广泛使用的数据库管理系统,而Java作为一种跨平台的编程语言,提供了丰富的API来与各种数据库进行交互,其中包括Oracle数据库。本篇将...
为了确保系统的稳定运行和数据的安全性,有时需要对`SYS.AUD$`表进行清理或截断。本文档将详细介绍如何为特定用户授予截断`SYS.AUD$`表的权限,并提供一系列与之相关的Oracle数据库管理和优化操作。 #### 关键知识...
### Oracle的Connect By...此外,结合其他函数(如`LPAD`和`SYS_CONNECT_BY_PATH`)使用,可以让查询结果更加直观易懂。这对于开发人员来说是一项非常有用的技能,特别是在处理复杂的组织结构或者产品分类等场景时。
OracleConnect.zip_OracleConnect_delphi oracle_odac_odac delphi_这个压缩包文件主要涉及在Delphi开发环境中,利用ODAC(Oracle Data Access Components)控件来实现与Oracle数据库的连接,而无需安装完整的Oracle...
很多场合我们都会用到...sys_connect_by_path(字段名, 2个字段之间的连接符号),这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,’,’)。这个
cx_Oracle是Python编程语言中用于连接Oracle数据库的一个模块。该模块遵循Python数据库API规范,并且适用于Oracle 11.2和12.1版本,同时兼容Python 2.x和3.x版本。cx_Oracle模块通过使用Oracle客户端库来实现与...
Oracle 连接查询是指使用 START WITH 和 CONNECT BY 语句来实现递归查询的方法,这种方法可以生成树形结构的数据。在 Oracle 中,START WITH 语句用于指定递归查询的开始记录,而 CONNECT BY 语句用于指定递归查询的...