zoukankan      html  css  js  c++  java
  • oracle中有update…from机关吗?



    作者: Relief  出自: http://www.linuxdiyf.com
    许多熟悉SQL server的冤家在接触到oracle的时分经常犯的一个错误就是总认为oracle中也会有update from这种机关。请你逝世了这条心吧,在oracle中的update语句中不存在from语句。

    后面我们简朴引见过Oracle的update语句。这里我们重点引见假定基于其余表来更新以后表的update语法。

    我们知道在oracle中的例子数据库中闻名为scott的schema,皮相有一个表是emp,我们就拿这里表来举例

    先设立建立一个机关如出一辙的表emp1,并为其拔出部分数据

    create table emp1
    as
    select * from emp where deptno = 20;

    update失落emp1中的部分数据
    update emp1
    set sal = sal 100,
    comm = nvl(comm,0) 50

    然后我们试着运用emp1中数据来更新emp中sal 和 comm这两列数据。

    我们可以这么写
    Update emp
    Set(sal,comm) = (select sal,comm. From emp1 where emp.empno = emp1.empno)
    Where exists (select 1 from emp1 where emp1.empno = emp.empno)

    请你尤其注意这里的where子句,你可以检验考试不写where子句来实行以下这句话,你将会使得emp中的许多值变成空。

    这是由于在oracle的update语句中假定不写where子句,oracle将会默许的把全部的值全部更新,即使你这里运用了子盘考而且某在值并不能在子盘考里找到,你就会想固然的认为,oracle也许将会跳过这些值吧,你错了,oracle将会把该行的值更新为空。

    我们还还可以这么写:

    update (select a.sal asal,b.sal bsal,a.comm acomm,b.comm bcomm from emp a,emp1 b where a.empno = b.empno)
    set asal = bsal,
    acomm = bcomm;

    这里的表是一个类视图。
    固然你实行时能够会碰着如下错误:

    ERROR 位于第 2 行:
    ORA-01779: 无法编削与非键值保留表对应的列
    这是由于新建的表emp1还没有主键的缘故

    上面增添一个主键
    alter table emp1
    add constraint pk_emp1 primary key (empno);

    实行之后

    在实行后面的语句就能成功。

    这里我们总结一下:

    在oracle中不存在update from机关,以是碰着需求从其余一个表来更新本表的值的结果的时分,有两种处置的步伐:

    一种是运用子盘考,运用子盘考时肯定要注意where条件(普通后面接exists子句),除非两个表是逐一对应的,否则where条件必不可少,脱漏掉where条件时能够会招致拔出大批空值。

    其余一种是类视图的更新方法,这也是oracle所独占的。先把对应的数据全部抽掏出来,然后更新表一样更新数据,这里需求注意的是,必需包管表的数据独一型。




    版权声明: 原创作品,应承转载,转载时请务必以超链接方法标明文章 原始情由 、作者信息和本声明。否则将追查司法责任。

  • 相关阅读:
    git 获取之前某个版本
    mysql默认查询顺序
    tp5链式查询fetchSql(true)方法
    微信中关闭网页输入内容时的安全提示
    SourceTree + BeyondCompare 配置 + 使用教程
    SourceTree 免登录跳过初始设置
    git 常规发布流程
    Git常用操作命令
    手动安装phpRedisAdmin
    docker-compose快速搭建lnmp+redis服务器环境
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975948.html
Copyright © 2011-2022 走看看