oracle迁移父子数据

 

现有需求如下,业务组织单元表中id字段数据在另外一个系统全部重复,但需要将此业务单元组织导入另一系统

业务组织单元表Isc_Specialorg_Unit

表中存在ID字段为子节点数据,parent_id为父节点数据,orgpath为组织路径

现在做如下操作:

1.创建临时表

create table test as select * from Isc_Specialorg_Unit t

2.在test表中增加三列id1,parent_id1,orgpath1

alter table test add (id1 varchar(32));
alter table test add (parent_id1 varchar(32));
alter table test add (or1 varchar(32));

3.更新id1列为随机数据

update test set id1=SYS_GUID()

4.根据表test在创建临时表test1

create table test1 as  select * from test tselect 'create table test1 as select '|| wm_concat(column_name) || ' from test' sqlStr   from user_tab_columns where table_name='test';

5.根据id列,parent_id列,id1,更新parent_id1列的值为id1的值

merge into test k
using (select a.id1,a.id from test1 a) kk
on (k.parent_id=kk.id)
when matched then update set k.parent_id1=kk.id1

6.将test中id列和parent_id列删掉

alter  table test drop column id;
alter  table test drop column parent_id;

7.修改id1为id,pranent_id1为parent_id,获取组织路径并创建表test3

create table test3 as 
select distinct a.id ,sys_connect_by_path(id,'/') orgpath from test a start with a.id='1'connect by prior  a.id=a.parent_id

7.根据test3表将组织路径保存至test的orgpath中

merge into test b
using 
(
select a.id,a.orgpath from test3 a
) kk
on (b.id=kk.id)
when matched then update set b.orgpath=kk.orgpath

8.导出表test为sql文件,删掉表 drop test;drop test1;drop test3导入另一系统数据库

 

备注:

select ... from <TableName>

  where <Conditional-1>

  start with <Conditional-2>

  connect by <Conditional-3>

 

 

connect by中的条件就表示了父子之间的连接关系,比如 connect by id=prior  pid

LEVEL伪列表示树的深度(或叫高度)

其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果,[where 条件1]可以不需要,若是出现则要放在 connect by 与 start with 语句之前,否则出错

 [where 条件1]、[条件2]、[条件3]各自作用的范围都不相同:     

 [where 条件1]

是在根据“connect by [条件2] start with [条件3]”选择出来的记录中进行过滤,是针对单条记录的过滤, 不会考虑树的结构(最后的过滤);

 [ connect by 条件2]

指定构造树的条件,以及对树分支的过滤条件,在这里执行的过滤会把符合条件的记录及其下的所有子节点都过滤掉;   

 [ start with 条件3]

限定作为搜索起始点的条件,如果是自上而下的搜索则是限定作为根节点的条件,如果是自下而上的搜索则是限定作为叶子节点的条件; 

要根据connect by 从上到下还是从下到上,来确定起始节点,可能是叶节点,也可能是父节点,这些开始节点可以是多个,并且包含这些节点。

层级查询语句(hierarchical query)中,where子句先被执行,再执行CONNECT BY子句以及其附属子句

1、这里说的节点指的是层级查询语句(hierarchical query)中from子句里的表的每一数据行。


2、层级查询语句(hierarchical query)中,CONNECT BY子句是必选的,而START WITH子句是可选的,START WITH子句是用来修饰CONNECT BY子句的,若该子句被省略,则表示所有满足查询条件(即where子句里的条件)的行作为根节点

3、prior关键字放在CONNECT BY子句中。其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR id = parent_id就是说上一条记录的id 是本条记录的parent_id,即本记录的父亲是上一条记录,prior放在connect by子句连接条件里的哪一边,哪一边就是父节点的编号值的来源,而connect by子句连接条件里等号另一边就是记录一数据行其对应的父节点的编号值

 

START WITH 子句和CONNECT BY子句是两个相互独立的子句,即并没有规定START WITH 子句出现的列就是要为CONNECT BY子句里那个带有关键字prior的列,START WITH 子句出现的列可以来自表里的任何列,也就是说START WITH 子句出现的列可以没有在START WITH 子句里出现,因为START WITH 子句的作用就是根据START WITH 子句的限定条件来筛选出哪些数据行作为根节点而已
start with子句不是一个独立的子句,即start with子句是一个不能单独出现在SQL语句的子句,必须在SQL语句中出现了connect by子句后,才能出现

当connect by子句的条件里出现的字段是普通字段,不是伪列字段rownum或是level时,connect by子句的条件里的表达式必须要有prior运算符 放在一个字段的前面;当connect by子句的条件里出现的是伪列字段rownum或是level时,connect by子句的条件里的表达式不用出现prior运算符
 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle表空间

概念 表空间和数据文件 ●表空间是逻辑存储概念&#xff0c;一个表空间是一个或多个数据文件的逻辑集合 ●存储对象(表、索引)逻辑的存储在表空间上&#xff0c;而存储对象的数据物理的存放在数据文件上 ●数据库至少需要一个叫做system的表空间&#xff0c;也就是系统表空间 ●…

oracle日志

日志分类 redo log files联机日志或重做日志 archived log files归档日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用户信息日志如跟踪会话日志 background dump_ dest进程日志还有其他一-些不常用的日志 v$database的log_mode 数据库归档模式…

MySQL:分库分表知识点盘点

本篇内容包括&#xff1a;数据库瓶颈、分库分表以及分库分表相关问题 一、数据库瓶颈 不管是IO瓶颈&#xff0c;还是CPU瓶颈&#xff0c;最终都会导致数据库的活跃连接数增加&#xff0c;进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是&#xff0c;可用…

oracle的sga

sga SGA的管理 ■有三种方式&#xff1a; ●8i:SGA的总大小由所有内存组件大小之和决定&#xff0c;不能直接定义SCA大小。对内部组件大小的修改必须在数据库重起 后 才能生为&#xff0c;所以叫做SGA的静态管理。 ●9i&#xff…

MySQL:主从相关知识点盘点

本篇内容包括&#xff1a;MySQL 主从复制简介、主从复制的原理以及主从搭建 一、MySQL 主从复制简介 在实际的生产中&#xff0c;为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff0c;一般都会采用**「主从复制」**。 比如&#xff1a;在复杂的业务系统中&#x…

oracle导出expdp

expdp/impdp 是 oracle 10g 版本后推出的服务器端工具--数据泵&#xff0c;作用是为了将数据库中的逻辑对象&#xff0c;比如表、用户、全库、表空间进 行导入&#xff0c;导出 命令解析 ATTACH ATTACH [[schema_name.]job_name] schema_name 表示用户名,job_name 表示导出的作…

oracle检查点

检 查 点 概述 ■l当修改数据时&#xff0c;需要首先将数据读入内存中&#xff08;Buffer Cache&#xff09;&#xff0c;修改数据的同时&#xff0c;Oracle会记录重做信息&#xff08;Redo&#xff09;用于恢复。因 为有了重做信息的存在&#xff0c;Oracle不需要在提交时…

文献翻译:Java theory and practice: Fixing the Java Memory Model, Part 2

Java theory and practice: Fixing the Java Memory Model, Part 2 译&#xff1a;Java 理论与实践&#xff1a;修复 Java 内存模型&#xff0c;第 2 部分 翻译自&#xff1a;http://www.ibm.com/developerworks/library/j-jtp03304/&#xff08;原文写于2004年3月&#xff0…

常用系统函数oracle

单行函数日期函数ADD_MONTHS(date, n):用于从一个日期值增加或减少一些月份 MONTHS_BETWEEN(date1, date2):判断两个日期之间相差的月份 LAST_DAY(date): 函数返回包含日期的月份的最后一天 ROUND(date[,fmt]): 将日期d按照fmt指定的格式舍入&#xff0c;fmt为字符串 TRU…

oracle游标

游标&#xff08;cursor &#xff09;是一个私有的SQL工作区域,是一个指向上下文区的句柄或指针&#xff0c;位于内存中的 "临时表"。 游标是SQL的一个内存工作区&#xff0c;由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某…

系统学习SpringFramework:Spring IOC

本篇内容包括&#xff1a;IOC 和 DI 的概念、Spring 容器&#xff0c;即 BenaFactory 与 AplicationConext 等 IOC 相关内容。 一、IOC 和 DI 的概念 1、IOC IoC&#xff08;Inversion of control &#xff09;即“控制反转”&#xff0c;它是一种设计思想而非一个技术实现。…

rowid

ROWID的格式rowidOOOOOOFFFBBBBBBRRR说明数据对象号相对文件号数据块号行号 上述表格是Oracle 9i及以上版本数据库中的rowid格式: 6位对象号3位相对文件号6位数据块号3位行号&#xff0c;是一个18位的64进制值。这个18位的64进制值在数据库内却是以10个bytes合计80个bit的二进制…

系统学习SpringFramework:循环依赖与三级缓存

本篇内容包括&#xff1a;Spring 中的循环依赖问题&#xff08;包括 Spring 中的循环依赖问题和Spring 中的循环依赖的 5 种场景的介绍&#xff09;、Spring 三级缓存介绍、4 个 Spring 无法自动解决的循环以来场景以及其对应的手动解决方式。 一、Spring 中的循环依赖问题 1、…

深入理解Java虚拟机:Java类的加载机制

本篇内容包括&#xff1a;Java 类的加载机制&#xff08;Jvm 结构组成、Java 类的加载&#xff09;、类的生命周期&#xff08;加载-验证-准备-解析-初始化-使用-卸载&#xff09;、类加载器 以及 双亲委派模型。 一、Java 类的加载机制 1、 Jvm 结构组成 Jvm 整体组成可分为…

新版谷歌浏览器开启Flash支持

浏览器地址栏中输入chrome://version查看Chrome浏览器、Flash插件的版本信息。 Chrome 69.0-70.0版本Chrome 71.0-74.0及以后版本谷歌浏览器地址栏中输入【chrome://flags/#enable-ephemeral-flash-permission】&#xff0c;将【Enable Ephemeral Flash Permissions】从【Defau…

深入理解Java虚拟机:Java垃圾回收机制

本篇内容包括&#xff1a;JAVA 垃圾回收机制概述、有哪些内存需要回收、如何回收&#xff08;标记-清除、标记-整理&#xff08;标记-清除-压缩&#xff09;、复制&#xff08;标记-复制-清除&#xff09;、分代收集等算法&#xff09; 以及 何时进行垃圾回收等内容&#xff01…

深入理解Java虚拟机:Java垃圾回收器

本篇内容包括&#xff1a;7 种 Jvm 垃圾回收器的介绍、对比 以及 对应的 Jvm 参数设置&#xff0c;这 7 种包括了&#xff1a;Serial、ParNew 以及 Parallel Scavenge 三种新生代回收器 和 &#xff1a;Serial Old、Parallel Old 以及 CMS 三种老年代回收器&#xff0c;此外还有…

网络协议:什么是网络分层的七四五

本篇内容包括&#xff1a;网络分层七层、五层、四层网络协议概念的介绍&#xff0c;IOS 体系结构的介绍与构成、TCP/IP体系结构的简介及与IOS体系的关系 以及五层体系结构的介绍。 一、七层、五层、四层网络协议概念 1、关于网络协议 网络协议&#xff0c;即是指计算机网络中…

网络协议:一文搞懂Socket套接字

本篇内容包括&#xff1a;Socket 套接字的简介、Socket 套接字的分类、Java 中的 Socket 即 java.net.ServerSocket、java.net.Socket 的使用&#xff0c;以及Java 使用套接字 Scoket 编程的Demo。 一、Socket 简介 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、…