精华内容
下载资源
问答
  • Oracle 批量修改数据-Merge 使用小结

    千次阅读 2017-12-21 10:04:31
    由于是批量修改接触到了Oracle的merge遇到新的知识,本人首先去了解了一下基本概念:MERGE语句是SQL语句的一种。在SQL Server、Oracle数据库中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的语法,用来...

    在近期的需求中遇到了匹配两表的关联字段,修改主表的字段业务。由于是批量修改接触到了Oracle的merge

    遇到新的知识,本人首先去了解了一下

    基本概念:

    MERGE语句是SQL语句的一种。在SQL Server、Oracle数据库中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
    具体来说,MERGE语句会检查原数据表记录和目标表记录。如果记录在原数据表和目标表中均存在,则目标表中的记录将被原数据表中的记录所更新(执行Update操作);如果目标表中不存在的某(些)记录,在原数据表中存在,则原数据表的这(些)记录将被插入到目标表中(执行Insert操作)。
    在Oracle 10g之前,merge语句支持匹配更新和不匹配插入两种简单的用法,在10g中Oracle对merge语句做了增强,增加了条件选项WHERE和DELETE操作.

    Merge语法:

    MERGE [hint] INTO [schema ] table [t_alias]
    USING [schema ]{ table | view | subquery } [t_alias]
    ON ( condition )
    WHEN MATCHED THEN merge_update_clause
    WHEN NOT MATCHED THEN merge_insert_clause;

    使用详情:
    MERGE INTO second s 
    USING (select * from trade) t 
    ON (s.settle_serial=t.settle_serial)  
    WHEN MATCHED THEN
    UPDATE SET
    s.remarks = t.serial
    WHERE to_char(add_time,'yyyy-MM-dd')=to_char(sysdate,'yyyy-MM-dd')
    
    --其中 
    second 为目标表,也就是执行MERGE INTO 需要修改的表,s为别名 --t也是别名
    USING 为目标表提供数据源(Tip:其提供的数据源可以为 单个表[trade],也可以为一个sql[select * from trade])
    ON 表示两张表的关联条件
    WHEN MATCHED THEN 表示符合 ON 关联条件的数据 进行操作
    UPDATE SET 修改操作
    update的数据必须为目标表的数据,
    WHERE 满足修改的语句(Tip:lz这里是当天时间,格式化当天时间,与数据库add_time匹配)

    如果在进行万批量修改操作后,有业务需求要求向目标表写入不匹配数据就会用到下面的Merge 语句

    WHEN NOT MATCHED THEN INSERT VALUES (s.ID, s.OWNER, s.OBJECT_NAME,s.REMARKS);
    
    --其中
    WHEN NOT MATCHED THEN 表示为不匹配ON中的关联条件的数据进行下面的操作
    添加到s目标表的数据,为资源表的数据。
    

    如上为本人亲测使用,批量修改还可以使用update-select 进行批量修改。

    现在的merge应该可以完全代替update了。。。
    因为oracle update的限制,关联update写法类似update set =(….写一遍) where exists (写一篇),而且对表或索引的访问光写法就2次,而且对于set里的子查询类似nested loops…执行次数可能更多了,更新的行数多必然慢。
    但是merge就没有上面的缺点了,可以走hash join,更新行数多,优势就出来了。。。

    展开全文
  • 基本概念: MERGE语句是SQL语句的一种。...通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDATE,...

    基本概念:


    MERGE语句是SQL语句的一种。在SQL Server、Oracle数据库中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。 
    具体来说,MERGE语句会检查原数据表记录和目标表记录。如果记录在原数据表和目标表中均存在,则目标表中的记录将被原数据表中的记录所更新(执行Update操作);如果目标表中不存在的某(些)记录,在原数据表中存在,则原数据表的这(些)记录将被插入到目标表中(执行Insert操作)。 
    在Oracle 10g之前,merge语句支持匹配更新和不匹配插入两种简单的用法,在10g中Oracle对merge语句做了增强,增加了条件选项WHERE和DELETE操作.
     

    Merge语法: 

     merge into 目标表名

    using( select * from 根据表名)

    on 关联条件

    when  matched then    

    update set xxx = xxx,xxx=xxx where 条件 

    when not matched then 

    insert values (xxx,xxxx,xxx,xx )

    注:批量修改和增加 可以一个使用,也可以分开使用,根据实际情况来选择

     如:

    merge into ASS_DUAL_1 t      
    using (select * from ASS_DUAL_2) b
    on (t.id= b.id)
    
    --修改
    when matched then 
    update set t.DEPRE_MONEY= b.Depre_Money , t.cur_money = b.cur_money
    
    --增加
    when not matched then 
    insert values (xx,xx,xx,xx)
       

      本人亲自验证过

    展开全文
  • 现在有一张表,数据量有十万,有一个字段是空的,现在要按数据量比例给这个字段设置三个不同的值,比如百分之三十的数据设置成1,百分之三十设置成2,剩下的百分之四十设置成3。比例无所谓不固定。 有没有大神教一下...
  • oracle批量修改数据

    2015-07-08 11:34:00
    2019独角兽企业重金招聘Python工程师标准>>> ...

    update t01_bpa_risk_lib set descer=replace(descer,'工商','') where descer like '%工商%';


    转载于:https://my.oschina.net/swchenml/blog/476089

    展开全文
  • oracle批量生成数据脚本,oracle批量生成数据脚本,oracle批量生成数据脚本,oracle批量生成数据脚本。
  • Oracle 根据条件批量修改数据

    千次阅读 2019-10-30 16:44:15
    update ydgl.T_ZHGL_ZLBTZH t set t.yddw_code = ( select w.f_code from ydzd.T_BASE_ORG_YDDW...//条件相同则修改 where w.lj_code = t.lj_code and where.f_name = t.yddw_name ) where t.yddw_name in ( selec...

     

    update ydgl.T_ZHGL_ZLBTZH t set t.yddw_code = (
    select w.f_code 
    from ydzd.T_BASE_ORG_YDDW w 

    //条件相同则修改
    where w.lj_code = t.lj_code and where.f_name  = t.yddw_name


    ) where t.yddw_name in (
    select w.f_name from ydzd.T_BASE_ORG_YDDW w)
     

    展开全文
  • Oracle批量修改

    千次阅读 2017-08-14 16:49:40
    问题:根据唯一字段编码修改其它字段,修改部分数据,数量在上万条数据数据大,一开始就卡死了!笨办法,一条一条修改不知可年可月啊。其他方法个人原因实在是无能为力。如下:update ka02_new set aka065=1,aka...
  • 这篇文章基础是在产品投产后生产会出现问题的情况下,对于用户基数百万级别的时候,对于问题数据修改,不能一条语句全量的修改,需分段提交,存储块就能很好的解决这类问题,代码案例如下,替代脚本就可以使用,...
  • select t_tables.table_name, t_column.column_name, t_column.data_length, 'alter table ' || t_column.table_name || ' modify ' || t_column.column_name || ' varchar2(50);' as alter_sqlstr ...
  • Oracle批量增加和修改

    2018-10-22 13:46:07
    1.批量增加的定义语法insert into (table表名) selectquery -- 批量增加 -- insert into DEPT(DEPTNO,DNAME,LOC)...2.批量修改的定义语法update (table表名) set (column列名)= selectquery -- 批量修改 ...
  • 问题:根据唯一字段编码修改其它字段,修改部分数据,数量在上万条数据数据大,一开始就卡死了!笨办法,一条一条修改不知可年可月啊。其他方法个人原因实在是无能为力。如下: update ka02_new set aka065=1,aka...
  • ORACLE 修改数据

    千次阅读 2020-12-12 13:44:21
    今天说一下ORACLE修改数据库中数据的几种方法: 1、UPDATE 确定条件批量修改 --批量修改 UPDATE cux_oa_person_b t --表名 SET t.person_number = '111' --需要修改的数据 WHERE t.person_name = 'xxx' --条件 ...
  • Oracle实现批量修改的两种方法

    万次阅读 2018-04-26 20:40:40
    需求:T1表有千万级别的数据量,需要更新这个表的字段a,b满足2个条件的记录。 做法:一般业务会将条件通过excel表格提供给开发,那么开发首先需要将这个excel表格的内容插入到临时表T2中,考虑到a,b都不是主键,...
  • NULL 博文链接:https://zzx0421.iteye.com/blog/335955
  • Java实现oracle数据批量操作

    千次阅读 2018-08-18 11:51:14
    TestDemo:结合位于java.sql下面的接口 PreparedStatement和oracle事务实现批量删除 常用方法: int [] executeBatch(): 将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。 ...
  • 2.查询出需要修改的列 数据 3. 赋值循环变量 i in 查询出的数据 4. 赋值自定义变量 b = 想要修改的值 5. update tablename set 修改列 = 变量b where 修改列的数据 = 循环变量 i; declare b varchar2(35); begin...
  • 借鉴: http://blog.csdn.net/huangjing_whlg/article/details/20464237 INSERT ...功能描述, 将newMonth这个月没有, 但是oldMonth这个月有的数据复制一份, 并修改部分字段后, 存入当前表中.
  • merge into PA00_01 t1 using (SELECT p3.a00_01_12, P3.A00_01_14 FROM PA00_01_TEMP P3 WHERE P3.A00_01_07 = '411422')t2 on (t1.a00_01_12 = t2.a00_01_12 AND t1.a00_01_07='411422') when matched then ...
  • 有一张表,数据量十万,有一个字段是空的,怎么按数据量的比例给这个字段设置不同的值,比如百分之三十设置1,...或者是批量给指定的数据量设置值,比如指定前叁万条设置成1,中间叁万条设置成2,剩下的四万条设置成3。
  • oracle修改a字段,修改的字段是个子查询 查询出来的字段值为 a;10 b:20, a:13 b:60 a:18 b:84 a和b查出来的值为动态的 而且要把b当做where条件进行修改
  • 方法一 写PL/SQL,开cursor declare  l_varID varchar2(20);... cursor mycur is select T2.Id,T2.Subobject_Name from T2;...转载于:https://www.cnblogs.com/lowerCaseK/p/oracle_batch_update_more_table.html
  • 1、第一种使用循环修改表 --遍历一个表并作修改 declareblvarchar(100);--声明一个字符串变量 BEGIN FORL_RECORDIN(select*fromysl_config_cywherename='机动车六年免检') --将一个对象赋值到L_RECORD变量中 ...
  • 问题出现:客户修改数目或单价后,收费明细表中的实收价格,数量,实收合计没有修改,导致统计的时候有部分错误数据,还好有修改痕迹表,省了不少事情。现在需要写一个sql,修改以前积累的错误数据。 SAMPLEM 样品...
  • 1. 关闭数据库,然后启动至mount状态 sqlplus / as sysdba ...2. 修改物理文件: 我这边将: c:\cwdata\cwbaseora.dbf 迁移到 c:\cwbaseora.dbf 3. 执行 mount状态下的迁移命令. alte...
  • 发现所用的框架模板在update数据库数据时,即使只update一个数据,该模板也会把表所对应的实体类里的所有参数一并写入update语句中,造成大量的资源浪费,因此自己琢磨了一下,写了一个只针对要修改的参数写入update...
  • update 表名 set 字段名=replace(字段名,‘替换字符’,‘替换后字符’)
  • Oracle 批量处理数据

    2019-08-26 16:13:32
    1、大批量的更新update表的数据 DECLARE CURSOR CUR_B IS SELECT COUNT(1) FROM BatchCode A, BatchCode_dpp_201709071800 B where A.entid = B.entid and A.angleid = B.angleid and A.goodsid = B.goodsid ...
  • 业务中经常用到批量修改数据的情况,每次写之前都要百度查找好长时间,这次索性直接记录下来,供以后使用 基本格式 UPDATE 表名 SET 表名.字段名= ( SELECT 查询结果.字段名 FROM (查询语句) 结果表 WHERE ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,880
精华内容 13,952
关键字:

oracle批量修改数据