Oracle跟据a表修改b表的简单语句?

问题描述

在Oracle中,如果两张表的结构完全相同,那么新增的时候可以写成:insert into a select * from b;那么修改呢,如果想根据b表的数据来修改a表,有没有类似上面的语句啊,我的表结构上百个字段,我不想在存储过程中一个一个的使用set来完成,请大家帮忙,非常感谢!

解决方案

Oracle有个Merge Into非常好用好吧:Merge into A ausing(select b.xx,b.xxx from B)bon(a.xx=b.xx)when matched then update set a.xxx=b.xxxwhen not matched then insert (a.xx,a.xxx) values (b.xx,b.xxx)
解决方案二:
chensming 兄的这个应该可以 但是就是不知道效率的问题 第一句没问题 但是在COPY数据的时候 不知道执行效率 truncate table a; 然后 insert into a select * from b; update a set a.xxx = (select b.xxx from b where b.id = a.id) 也是可行
解决方案三:
不知道啊 所以说试试啊 不行就换一个么。。。例如 update A set a.name = (select b.name from B b where a.id = b.id) where exists (select 1 from B b where a.id = b.id);按道理是应该可以的。。。。。。。嚓 我还搜了下资料来着。。。。http://topic.csdn.net/t/20020828/09/976010.htmlhttp://topic.csdn.net/u/20080226/10/e9a7c1f4-42e6-4266-9c98-ecd17963bcd1.html
解决方案四:
truncate table a;然后 insert into a select * from b;
解决方案五:
这个。。。试试update a set a.xxx = (select b.xxx from b where b.id = a.id)

时间: 2024-11-18 01:19:28

Oracle跟据a表修改b表的简单语句?的相关文章

sql update-学生党 根据成绩表修改学生表“考试课程数”字段

问题描述 学生党 根据成绩表修改学生表"考试课程数"字段 需求:根据成绩表中的课程编号COURNO数据,统计考试课程数(一个学生要考几门课),并更新学生表"考试课程数"字段. 理想中学生表"考试课程数"字段中数据(从200001到200009)为: 1,1,2,0,1,1,1,0,0 自行尝试sql: update 学生 set 学生.考试课程数 = COUNT(成绩.学号STUNO) where (学生.学号STUNO = 成绩.学号STUNO

oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变

问题描述 oracle修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变 oracle 中修改一个表中的主键字段值,与其外键关联的另一个表中的相应字段值也改变? 有如下两张表,表a和表b 表a 结构如下: ID Name age 1 lisi 18 2 wangwu 21 3 sunliu 34 4 yiliu 24 ... ... ... 其中ID字段为表a主键且自增 表b结构如下: CID CNAME ID 1 aaaaa 1 2 bbbbb 2 3 cccccc 4 4

ORACLE的ORA-1693错误以及表和索引的表空间的移动

本公司开发的软件,有客户不能上传大的附件,页面不报任何错误.查看JBOSS日志,同样看不到任何错误,排除了软件本身故障. 在查看oracle数据库日志,发现当上传大的附件时出现错误信息 OEA_1693: MAX # EXTENTS 4096 reached in lobsegment nes.sys_LOB0000024832C00008$$ 解决过程 上网找了下资料 ORA-1693 max # extents (string) reached in lob segment string.s

Oracle 11gR2 用exp无法导出空表解决方法

Oracle 11gR2 用exp无法导出空表解决方法        在11gR2中有个新特性,当表无数据时,不分配segment以节省空间,Oracle 当然在执行export导出时,空表则无法导出,但是还是有解决办法的: 解决方法:一.insert一行,再rollback就产生segment了.该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 二.设置deferred_segment_creation参数  该参数值默认是TRUE,当改为FALSE时,无无是空表

oracle中变长数组varray,嵌套表,集合使用方法_oracle

创建变长数组类型 CREATE TYPE varray_type AS VARRAY(2) OF VARCHAR2(50); 这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50) 更改元素类型的大小或精度 可以更改变长数组类型和嵌套表类型 元素的大小. ALTER TYPE varray_type MODIFY ELEMENT TYPE varchar2(100) CASCADE; CASCADE选项吧更改传播到数据库中的以来对象.也可以用 INVALIDATE 选项使依赖对

电脑中通过修改注册表解决网页无法添加到收藏夹的方法

  电脑中通过修改注册表解决网页无法添加到收藏夹的方法.最近有不少用户反映在电脑中出现了无法添加网页到收藏夹的问题,尝试了各种方法都无法解决这个问题.对此,在接下来的内容中,小编为大家提供了一种通过修改注册表解决网页无法添加到收藏夹的方法,大家可以参考一下. 1.按Win+R打开运行,输入regedit并按回车键; 2.在注册表编辑器依次展开HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer/UserShell

修改注册表加强Win 2000安全

安全|注册表 DefaultTTL REG_DWORD 0-0xff(0-255 十进制,默认值128) 说明:指定传出IP数据包中设置的默认生存时间(TTL)值.TTL决定了IP数据包在到达目标前在网络中生存的最大时间.它实际上限定了IP数据包在丢弃前允许通过的路由器数量.有时利用此数值来探测远程主机操作系统. 2.防止ICMP重定向报文的攻击说明:该参数控制Windows 2000是否会改变其路由表以响应网络设备(如路由器)发送给它的ICMP重定向消息,有时会被利用来干坏事.Win2000中

修改注册表以增强网络功能

网络|注册表 我们可以把注册表看成是一个庞大的数据库,它收集了系统所有软硬件的配置与状态信息以及与用户相关的各种设置信息,对系统的正常运行起着至关重要的作用.如果我们是网吧或者公共机房的系统维护员的话,就应该充分利用注册表在网络方面的特有功能,来加强局域网的实用性或者上网冲浪的效率.今天,笔者就注册表在网络方面上的应用搜集整理了一部分操作技巧,希望这些技巧能对大家有所用处. 1.在局域网中隐藏服务器通常,我们在局域网中,利用网上邻居可以看到当前有哪些计算机正在工作,从而可以共享这些计算机上的资源

如何查看Oracle数据表的建表语句

oracle|数据|语句 如何查看Oracle数据表的建表语句? 系统环境:  1.操作系统:Windows 2000 Server,机器内存128M 2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3.安装路径:C:\ORACLE 实现步骤:  1.用EXP工具导出 2.导入时使用show=y选项.log选项 3.查看.编辑日志文件 具体实例:  1.调出SQL*Plus conn system/manager grant connect,resource to