在oracle添加列中如何批量更新一列记录

Oracle批量update_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Oracle批量update
来源:Linux社区&
作者:wanglilin
将t2(t_statbuf)表中id和t1(T_Mt)表相同的记录更新进t1表。
1.错误的写法:
update&table_name&t1&set&(a,b,c)=(&select&a,b,c&from&table_name_2&t2&where&t1.a=t2.a);&&
这种写法,会更新t1表中的所有行:如果t1.a=t2.a的,就更新t2中查出的记录进t1;如果t1.a&&t2.a的,t1中的记录会被更新成空(null)。
正确的写法:
update&table_name&t1&set&(a,b,c)=(&select&a,b,c&from&table_name_2&t2&where&t1.a=t2.a)&where&exists(select&1&from&table_name_2&t2&where&t1.a=t2.a);&&
正确的写法,就是在后面加了一句 where exists(select 1 from table_name_2 t2 where t1.a=t2.a);
这句话的意思是:如果存在t1.a=t2.a,就更新,否则,不更新,所以不会导致t1表中所有的记录都被更新。
update table_name_1 set (a,b) = (select 1,2 from dual where 1=2);
这个结果会把table_name_1中的记录全部更新成空(null),因为后面1=2不成立。
update时,要弄清限定条件,要测试!
我的测试语句:
update&my_time_test1&t1&set&(MDATE,DISCRIPT)&=(select&MDATE,DISCRIPT&from&&&
&&my_time_test&t2&where&t1.DISCRIPT=t2.DISCRIPT)&where&exists&(select&1&from&&&
&&my_time_test&t2&where&t1.DISCRIPT=t2.DISCRIPT);&&
我的业务语句:
update&T_Mt&t1&set&(Stat,OStat,RptTime)&=(&&
&select&Stat,Stat,RptTime&from&t_statbuf&t2&where&t1.MsgId=t2.MsgId)&where&exists(&&
&select&1&from&t_statbuf&t2&where&t1.MsgId=t2.MsgId);&&&&
相关资讯 & & &
& (10/22/:50)
& (07/18/:00)
& (11/10/:58)
& (08/22/:00)
& (06/18/:32)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款博客分类:
oracle批量插入:
&insert id="insertBatch" parameterType="java.util.List"&
insert into table_name(id, name,updateTime)
&foreach collection="list" item="item" index="index" separator="union all" &
#{item.id,jdbcType=VARCHAR}, #{item.name,jdbcType=VARCHAR}, #{item.updateTime,jdbcType=TIMESTAMP}
from dual)
&/foreach&
需要注意的是sql中没有values;&foreach&标签中语句 (select ..... from dual)
oracle批量更新:
&update id="updateBatch" parameterType="java.util.List"&
&foreach collection="list" item="item" index="index" separator=";" &
update table_name
name= #{item.name}
where id = #{item.id}
&/foreach&
&update id="updateBatch" parameterType="java.util.List"&
&foreach collection="list" item="item" index="index" open="begin" close="" separator=";"&
update table_name
name= #{item.name}
where id = #{item.id}
&/foreach&
oracle批量删除:
&delete id="deleteBatch" parameterType="java.util.List"&
delete from table_name
&foreach collection="list" index="index" item="item" open="(" separator="or" close=")"&
id=#{item.id}
&/foreach&
浏览: 14364 次
来自: 青岛
你好,MinorGC 这个示例,我运行的结果怎么跟你不一致呢我 ...
你好,你这么做可以导出vs文件吗
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'【问题】现在有两个千万级别的结构相同数据不同数据表T_SMS_PHONENO(目的表),T_SMS_PHONENO2(源表),根据源表数据更新目的表的数据。
【分析】根据经验,更新方法一般有以下几种:
1、直接update。
update T_SMS_PHONENO T Set
T.NAME=(select NAME from T_SMS_PHONENO2 where PHONENO=T.PHONENO)
2、采用分条更新。根据记录ID逐条更新。
open cur is select phoneno,name from T_SMS_PHONENO;
fetch cur in v_pn,v_
update T_SMS_PHONENO T set T.NAME=v_name where v_pn=T.
exit when cur%
3、采用分批次更新。将数据按表分区字段或其他字段依次进行分批次更新。
open cur is select region from T_SMS_PHONENO
fetch cur in v_
update T_SMS_PHONENO T set T.NAME=(select name from T_SMS_PHONENO2 where phoneno=T.Phoneno) where T.region=v_
exit when cur%
4、虚拟一张表,唯一关联后进行更新。
update (select
T.name,T2.name name2 from T_SMS_PHONENO T,T_SMS_PHONENO2 T2 where T.phoneno=T2.phoneno) set name=name2;
5、Create 一张新表后进行更新。
create table TEMP_SMS_PHONENO as select * from T_SMS_PHONENO T,T_SMS_PHONENO2 T2 where T.phoneno=T2.
生成新表,然后重命名表为T_SMS_PHONENO
1、对于大表的更新如果采用直接update语句,则会直接产生大量回滚,并且时间很长,出现假死现象。
2、1小时。
3、30分钟。
4、2分钟。
5、30秒,因为不产生redo,undo动作,insert语句会很快。
如果存在唯一性关联字段的话,则采用第四种方法更新,是很快的,如果不存在唯一关联字段则需要分批次更新,或者create 个新表。
Oracle批量、大量Update方法总结
一、业务场景:
(1)主从两个表,主表Student,有字段id、name、sex,从表Boy,有字段id、name,主从表同一对象id相同
(2)从表Boy的name属性被业务修改,定时批量处理...
Oracle中用一个表的数据更新另一个表的数据
Oracle中用一个表的数据更新另一个表的数据 有下面两个表:将表tab1中id值与和表tab2中id值相同的行的val更新为tab2中val的值.
select * from tab1;
Oracle优化:大量数据插入或更新
最近遇到的一个面试题,印象很深记录如下:
面试官:现在有一张表数据量达很大,要把里面记录时间的那行更新到当前最新日期,每次更新都很卡,机器变慢影响业务,怎么优化。
我的想法是:大量的数据更新肯定会写记...
Oracle数据库批量更新某列数据
先讲下我遇到的情况:
有一张表a,已经存在一个字段该字段是date类型,需求将该字段改为varchar2()类型,我们都知道,
Oracle在该字段有值情况是不可以更新数据的,如果你不在乎该字段...
ORACLE批量更新四种方法比较
软件环境 Windows 2000 + ORACLE9i 硬件环境 CPU 1.8G + RAM 512M 现在我们有2张表 如下:T1--大表 10000笔 T1_FK_ID T2--小表 500...
批量更新四种方法比较
转ORACLE批量更新四种方法比较软件环境 Windows 2000 + ORACLE9i
硬件环境 CPU 1.8G + RAM 512M现在我们有2张表 如下:
T1–大表 10000笔 T...
Oracle批量更新任务分解(数据量过亿)
--游标更新,批量提交
--设定一万条数据提交一次,耗时十多个小时未得到任何反馈,中断执行,重新分解
--维保信息(目标),T_BIZ_Temp,数据量7500万行
--维修工时(源表),T_MTD_...
Oracle批量Update记录
工作中经常用到Oracle批量更新记录,做为老手也怕出错,总之要小心再小心,确保数据批量更新正确。
下面举一个例子:
1、创建两张结构类似的表,建表语句如下:
create table jayt1(
oracle批量更新一个表中的一个字段
最近遇到一个sql问题。老大们让我把一个表中的一列数据做更新。更新的内容和对照表有给提供。后来仔细查看资料 总结出这样的sql
update 更新表 b set(b.需要更新的字段) = ...
没有更多推荐了,博客分类:
Oracle中试图对一个子查询进行更新时可能会出现ORA-01779错误。该错误的内容为:
ORA-01779: cannot modify a column which maps to a non-key-preserved table
例如,使用以下的更新查询就会出现该错误。
CREATE TABLE test1 ( id integer primary key, num integer );
INSERT INTO test1 VALUES (1,0);
INSERT INTO test1 VALUES (2,0);
INSERT INTO test1 VALUES (3,0);
INSERT INTO test1 VALUES (4,0);
CREATE TABLE test2 ( id integer, num integer, upd integer );
INSERT INTO test2 VALUES (1,10, 0);
INSERT INTO test2 VALUES (2,20, 1);
SELECT t1.id id1, t1.num num1, t2.id id2, t2.num num2
FROM test1 t1, test2 t2
WHERE t1.id=t2.id AND t2.upd=1
SET num1=num2;
ORA-01779: cannot modify a column which maps to a non-key-preserved table
这个错误的意思是,子查询的结果中,更新数据源(test2)的内容不唯一,导致被更新对象(test1)中的一行可能对应数据源(test2)中的多行。 本例中,test2表的id不唯一,因此test2表中可能存在id相同但是num不相同的数据,这种数据是无法用来更新 test1 的。
解决方法就是保证数据源的唯一性,例如本例中可以为test2.id创建一个唯一索引:
CREATE UNIQUE INDEX test2_idx_001 ON test2 (id);
之后上面的更新就可以执行了。
另外也可以强制 Oracle 执行,方法是加上 BYPASS_UJVC 注释。
SELECT /*+ BYPASS_UJVC */ t1.id id1, t1.num num1, t2.id id2, t2.num num2
FROM test1 t1, test2 t2
WHERE t1.id=t2.id AND t2.upd=1
SET num1=num2;
BYPASS_UJVC的作用是跳过Oracle的键检查。
这样虽然能够执行了,但是如果test2中存在不唯一的数据,test1就会被更新多次而导致意想不到的结果。
浏览: 203606 次
来自: 杭州
有什么理由不点个赞呢!!!!
感谢楼主的无私奉献
附件呢,没看到啊
谢谢,可以使用。
看后留言感谢是美德~~~
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'oracle中用update批量替换字段中某字符串
update 表 set
url=replace(url,'www.blog0754.com','www.yuncsoft.com')
将表中url中的'www.blog0754.com'替换原www.yuncsoft.com
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 oracle合并列内容 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信