[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相关推荐

  1. docker swarm英文文档学习-8-在集群中部署服务

    Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...

  2. Ubuntu20.04虚拟机使用Kubeadm从0到1搭建K8S集群(超详细)

    前言 最近在读张磊老师的<深入剖析Kubernets>,在阅读4.2节的时候遇到了问题,由于书上使用的版本已经过时,很多命令的执行都失败了,在经历了长达两个星期的折磨以后,我终于把这一节需 ...

  3. 使用docker创建swarm集群网络

    Docker集群网络,解决的问题是能同时响应多少请求.不是分布式计算,因为分布式计算是将一个任务拆分若干个子任务,然后将子任务分配到不同的机器上去执行. 集群网络的命令 (1)docker swarm ...

  4. Python第六次学习例题---表、题:“三国演义”和“柯南系列41部合集”词云

    今天参加了蓝桥杯!天呐!人没了!我也太菜了吧!o(╥﹏╥)o 这次,老师的实验课题目如下,和我的练习题 目录 一.表 二.老师的题("三国演义"词云) 二.自己的练习题(柯南系列4 ...

  5. 深度学习目标检测(YoloV5)项目——从0开始到项目落地部署

    前言 训练和开发环境是win10,显卡RTX3080;cuda10.2,cudnn7.1;OpenCV4.5;yolov5用的是5s的模型,2020年8月13日的发布v3.0这个版本; ncnn版本是 ...

  6. 时空位置大数据AI平台技术实现架构设计

    1 开发语言选择 1.1 基于开源框架 以开源框架本身支持的主流语言作为选择,目前选择的框架,均支持Java语言. 1.2 定制开发的算法 从长远来看,人工智能算法需要依赖于分布式运算架构,无论是MR ...

  7. Temporal Shift Module(TSM) 部署在自己电脑上并训练自己的数据集

    引言: 本小白第一次写博客,如有不妥请多多包含. 能接触到TSM还是因为毕设的原因.本小白今年本科大四,在毕设的时候选择了 "用事件相机进行人体动作的识别" 这个项目.该项目旨在应 ...

  8. VB速查大全(数据库、表格及报表编程) ★ VB错误处理,ado常见错误,VB数据类型等,网上有很多教程是错的,强烈建议看此文

    ■ 学新的编程语言先仔细看该语言案例教程或从入门到精通的书.对具体语句.函数及可使用对象不了解或忘记的,可在该编程语言的"参考手册"中检索. <如果资料为电子书时,即使不知道 ...

  9. yolov3实现Kitti baseline(含评估代码:easy、moderate和hard的AP计算,fps计算)(下)

    yolov3实现Kitti baseline(含评估代码:easy.moderate和hard的AP计算,fps计算) 上篇博客谈到如何训练基于kitti的yolov3模型,这篇主要讨论如何使用模型参 ...

最新文章

  1. String.Format in javascript
  2. mongoDB条件操作符
  3. Linux下的设备大体分为三类,微机原理知识点总结
  4. [NOI2013]快餐店
  5. cxgrid限定行数
  6. IT增值服务,客户案例(一)--山东青岛在职人士,2年.Net经验,转Java开发半年
  7. 智能语音升级用户体验,标贝以创新优势布局儿童有声内容市场
  8. Pass4side EMC E20-817认证考试题库
  9. 【D】分布式系统的CAP理论
  10. 如何在代码里打开Android手机通知状态栏
  11. SpringBoot学习心得分享
  12. shipyard docker集群问题
  13. 【TS】泛型 Generics
  14. USACO 2015 January Contest Bronze——奶牛的旅行路线
  15. 「学点C语言系列」02 判断年份是否为闰年
  16. 使用VSCode创建一个Vue项目
  17. 嵌入式入门学习笔记1:资料收集
  18. Gravity bridge——IBC Bridge to Ethereum
  19. AcWing:Dijkstra
  20. java实现第六届蓝桥杯立方体自身

热门文章

  1. java format 字符_JAVA字符串格式化-String.format()的使用
  2. mysql 时差查了13小时_Mysql 时间差了 14 或 13 小时 com.mysql.cj.jdbc.Driver
  3. Nature撤稿!为销毁造假证据丢弃电脑,“划时代”成果翻车了,副校长鞠躬道歉...
  4. 家用计算机先驱逝世:Linux之父曾受他启发,马斯克悼念
  5. G7创始人翟学魂:货运物流正在被IoT重构,卡车流量也能反映GDP走向 | MEET2021...
  6. 计算机技能最新需求排名:Python增速爆炸,SQL和Java老当益壮,AWS令人惊讶
  7. Grid不可编辑时,设置行背景颜色
  8. Xcode使用正则表达式替换
  9. Opencv笔记(九)——图像阈值
  10. 面向对象笔记2 原型链 解释