[20170513]update结果集.txt
--//前一阵子要对收费价格进行大量调整,当时开发随手写的sql非常不好,我建议通过结果集来修改,这样简单不容易出错.
--//通过例子说明:
1.环境:
SCOTT@test01p> @/ver1
PORT_STRING VERSION BANNER CON_ID
------------------------------ -------------- -------------------------------------------------------------------------------- ----------
IBMPC/WIN_NT64-9.1.0 12.1.0.1.0 Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0
create table t1 ( id number ,name varchar2(20);
insert into t1 values (1,'a');
insert into t1 values (2,'b');
insert into t1 values (3,'c');
insert into t1 values (4,'d');
create table t2 ( id number ,name varchar2(20));
insert into t2 values (2,'bb');
insert into t2 values (3,'cc');
--//实现目的是id相同值使用,使用t2表的name替换原来的t1表的name值.
2.查询:
SCOTT@test01p> select t1.id,t1.name t1name ,t2.id ,t2.name t2name from t1,t2 where t1.id=t2.id;
ID T1NAME ID T2NAME
---------- -------------------- ---------- --------------------
2 b 2 bb
3 c 3 cc
--//直接使用update对结果集修改:
update
(select t1.id,t1.name t1name ,t2.id ,t2.name t2name from t1,t2 where t1.id=t2.id)
set t1name=t2name;
*
ERROR at line 3:
ORA-01779: cannot modify a column which maps to a non key-preserved table
SCOTT@test01p> host oerr ora 01779
01779, 00000, "cannot modify a column which maps to a non key-preserved table"
// *Cause: An attempt was made to insert or update columns of a join view which
// map to a non-key-preserved table.
// *Action: Modify the underlying base tables directly.
--//主要问题我现在2个表没有主键.建立主键就ok了.
SCOTT@test01p> create unique index pk_t1 on t1(id);
Index created.
SCOTT@test01p> create unique index pk_t2 on t2(id);
Index created.
SCOTT@test01p> alter table t1 add constraint pk_t1 primary key (id) enable validate;
Table altered.
SCOTT@test01p> alter table t2 add constraint pk_t2 primary key (id) enable validate;
Table altered.
SCOTT@test01p> update (select t1.id,t1.name t1name ,t2.id ,t2.name t2name from t1,t2 where t1.id=t2.id) set t1name=t2name;
2 rows updated.
SCOTT@test01p> select * from t1;
ID NAME
---------- --------------------
1 a
2 bb
3 cc
4 d
--//可以发现只要建立主键.没有问题.
SCOTT@test01p> rollback ;
Rollback complete.
--//这样操作既简单也不容易出错.update的是结果集,而且多数情况先查询看看.前提条件是通过主键连接两个表.
3.注意一些开发这样写是错误的.
SCOTT@test01p> update t1 set name =(select name from t2 where t1.id=t2.id);
4 rows updated.
--//我以前就遭遇过这样的错误,小心小心!!修改4条记录.
SCOTT@test01p> select * from t1;
ID NAME
---------- --------------------
1
2 bb
3 cc
4
SCOTT@test01p> rollback ;
Rollback complete.
--//ID=1,4 的name被替换为NULL.必须满足在t2表存在的id修改.应该写成如下:
SCOTT@test01p> update t1 set name =(select name from t2 where t1.id=t2.id) where exists(select name from t2 where t1.id=t2.id);
2 rows updated.
SCOTT@test01p> select * from t1;
ID NAME
---------- --------------------
1 a
2 bb
3 cc
4 d
SCOTT@test01p> rollback ;
Rollback complete.
4.还有一种就是使用merge,我觉得我们开发很少使用merge.我自己也很少用.还是上面的方法简单实用,不会出错.
--//而且我们的程序非常垃圾,经常要求开发修改后台业务数据.我经常先查询出结果,然后写成如下例子:
update (select * from dept where deptno=10) set loc='xxxx';
[20170513]update结果集.txt相关推荐
- docker swarm英文文档学习-8-在集群中部署服务
Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...
- Ubuntu20.04虚拟机使用Kubeadm从0到1搭建K8S集群(超详细)
前言 最近在读张磊老师的<深入剖析Kubernets>,在阅读4.2节的时候遇到了问题,由于书上使用的版本已经过时,很多命令的执行都失败了,在经历了长达两个星期的折磨以后,我终于把这一节需 ...
- 使用docker创建swarm集群网络
Docker集群网络,解决的问题是能同时响应多少请求.不是分布式计算,因为分布式计算是将一个任务拆分若干个子任务,然后将子任务分配到不同的机器上去执行. 集群网络的命令 (1)docker swarm ...
- Python第六次学习例题---表、题:“三国演义”和“柯南系列41部合集”词云
今天参加了蓝桥杯!天呐!人没了!我也太菜了吧!o(╥﹏╥)o 这次,老师的实验课题目如下,和我的练习题 目录 一.表 二.老师的题("三国演义"词云) 二.自己的练习题(柯南系列4 ...
- 深度学习目标检测(YoloV5)项目——从0开始到项目落地部署
前言 训练和开发环境是win10,显卡RTX3080;cuda10.2,cudnn7.1;OpenCV4.5;yolov5用的是5s的模型,2020年8月13日的发布v3.0这个版本; ncnn版本是 ...
- 时空位置大数据AI平台技术实现架构设计
1 开发语言选择 1.1 基于开源框架 以开源框架本身支持的主流语言作为选择,目前选择的框架,均支持Java语言. 1.2 定制开发的算法 从长远来看,人工智能算法需要依赖于分布式运算架构,无论是MR ...
- Temporal Shift Module(TSM) 部署在自己电脑上并训练自己的数据集
引言: 本小白第一次写博客,如有不妥请多多包含. 能接触到TSM还是因为毕设的原因.本小白今年本科大四,在毕设的时候选择了 "用事件相机进行人体动作的识别" 这个项目.该项目旨在应 ...
- VB速查大全(数据库、表格及报表编程) ★ VB错误处理,ado常见错误,VB数据类型等,网上有很多教程是错的,强烈建议看此文
■ 学新的编程语言先仔细看该语言案例教程或从入门到精通的书.对具体语句.函数及可使用对象不了解或忘记的,可在该编程语言的"参考手册"中检索. <如果资料为电子书时,即使不知道 ...
- yolov3实现Kitti baseline(含评估代码:easy、moderate和hard的AP计算,fps计算)(下)
yolov3实现Kitti baseline(含评估代码:easy.moderate和hard的AP计算,fps计算) 上篇博客谈到如何训练基于kitti的yolov3模型,这篇主要讨论如何使用模型参 ...
最新文章
- String.Format in javascript
- mongoDB条件操作符
- Linux下的设备大体分为三类,微机原理知识点总结
- [NOI2013]快餐店
- cxgrid限定行数
- IT增值服务,客户案例(一)--山东青岛在职人士,2年.Net经验,转Java开发半年
- 智能语音升级用户体验,标贝以创新优势布局儿童有声内容市场
- Pass4side EMC E20-817认证考试题库
- 【D】分布式系统的CAP理论
- 如何在代码里打开Android手机通知状态栏
- SpringBoot学习心得分享
- shipyard docker集群问题
- 【TS】泛型 Generics
- USACO 2015 January Contest Bronze——奶牛的旅行路线
- 「学点C语言系列」02 判断年份是否为闰年
- 使用VSCode创建一个Vue项目
- 嵌入式入门学习笔记1:资料收集
- Gravity bridge——IBC Bridge to Ethereum
- AcWing:Dijkstra
- java实现第六届蓝桥杯立方体自身
热门文章
- java format 字符_JAVA字符串格式化-String.format()的使用
- mysql 时差查了13小时_Mysql 时间差了 14 或 13 小时 com.mysql.cj.jdbc.Driver
- Nature撤稿!为销毁造假证据丢弃电脑,“划时代”成果翻车了,副校长鞠躬道歉...
- 家用计算机先驱逝世:Linux之父曾受他启发,马斯克悼念
- G7创始人翟学魂:货运物流正在被IoT重构,卡车流量也能反映GDP走向 | MEET2021...
- 计算机技能最新需求排名:Python增速爆炸,SQL和Java老当益壮,AWS令人惊讶
- Grid不可编辑时,设置行背景颜色
- Xcode使用正则表达式替换
- Opencv笔记(九)——图像阈值
- 面向对象笔记2 原型链 解释