概述

数据表更新时,如果需要对修改前后的数据进行记录或比较,需要返回更新前后的数据。KingbaseES 可以通过 UPDATE语句是否能直接返回影响的数据。

KingbaseES支持insert,delete,update的returning。

  • insert returning 返回的是新插入的值。
  • delete returning 返回的是被删除的值。
  • update returning 返回的是更新后的值,不能返回更新前的值。

RETURNING语法:

RETURNING * | output_expression [ [ AS ] output_name ] [, ...]

RETURNING用法

INSERT

INSERT中,可用于RETURNING的数据是插入的行。 这在琐碎的插入中并不是很有用,因为它只会重复客户端提供的数据。 但依赖于计算出的默认值时可以非常方便。例如,当使用 serial列来提供唯一标识符时, RETURNING可以返回分配给新行的ID:

CREATE TABLE users (firstname text, lastname text, id serial primary key);

INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool') RETURNING id;

除了返回特定的列外,也可以 returning rowid ,或者 returning ctid

UPDATE

UPDATE中,可用于RETURNING的数据是被修改行的新内容。 例如:

UPDATE users SET firstname = 'Joe1'
WHERE firstname = 'Joe'
RETURNING firstname;

DELETE

DELETE中,可用于RETURNING的数据是删除行的内容。例如:

DELETE FROM users
WHERE lastname = 'Cool'
RETURNING *;

UPDATE 如何返回更新前的值

在DML触发器中,可以使用 RECORD类型NEW,存储INSERT或UPDATE操作产生的新的数据行,RECORD类型OLD 存储被UPDATE或DELETE操作修改或删除的旧的数据行。

为了 UPDATE RETURNING 返回 NEW 数据,同时返回OLD数据,可以使用关联OLD表,同时返回旧数据。

UPDATE users NEW SET firstname = OLD.firstname||'_A'
from users OLD
where OLD.ctid = NEW.ctid
RETURNING NEW.firstname firstname_new, OLD.firstname firstname_old; QUERY PLAN
-------------------------------------------------------------------------------
Update on users new (cost=28.90..60.95 rows=840 width=112)
-> Hash Join (cost=28.90..60.95 rows=840 width=112)
Hash Cond: (new.ctid = old.ctid)
-> Seq Scan on users new (cost=0.00..18.40 rows=840 width=42)
-> Hash (cost=18.40..18.40 rows=840 width=38)
-> Seq Scan on users old (cost=0.00..18.40 rows=840 width=38)

需要返回更新前的数据,添加了OLD表,所以COST增加了一次Seq Scan成本。

KingbaseES Returning 的用法的更多相关文章

  1. Oracle RETURNING INTO 用法示例 .

    The RETURNING INTO clause allows us to return column values for rows affected by DML statements. The ...

  2. KingbaseES DENSE_RANK 函数用法

    DENSE_RANK()函数用于为结果集分区内的每一行分配一个排名,排名值之间没有差距,函数为结果集的每个分区中的每一行分配一个等级. 与 RANK() 函数不同的是,DENSE_RANK() 函数总 ...

  3. ORACLE RETURNING 用法总结

    ORACLE RETURNING 用法总结 场景 在存储过程.PL/SQL块里需要返回INSERT.DELETE.UPDATE.MERGE等DML语句执行后的信息时使用,合理使用returning能够 ...

  4. KingbaseES ALTER TABLE 中 USING 子句的用法

    using子句用于在修改表字段类型的时候,进行显示的转换类型. 1.建表 create table t(id integer); 2.插入数据 insert into t select generat ...

  5. Stackoverflow/dapper的Dapper-Extensions用法(一)

    Dapper-Extensions Dapper Extensions is a small library that complements Dapper by adding basic CRUD ...

  6. WKWebView _WebFilterIsActive returning: NO

    写这篇文是因为在UIWebView加载页面的时候有时候会返回: filterBlacklist = ( ); filterWhitelist = ( ); restrictWeb = 1; useCo ...

  7. Wix 安装部署教程(十五) --CustomAction的七种用法

    在WIX中,CustomAction用来在安装过程中执行自定义行为.比如注册.修改文件.触发其他可执行文件等.这一节主要是介绍一下CustomAction的7种用法. 在此之前要了解InstallEx ...

  8. Python collections 模块用法举例

    Python作为一个“内置电池”的编程语言,标准库里面拥有非常多好用的模块.比如今天想给大家 介绍的 collections 就是一个非常好的例子. 1.collections模块基本介绍 我们都知道 ...

  9. C++语言中cin cin.getline cin.get getline gets getchar 的用法实例

    #include <iostream> #include <string> using namespace std; //关于cin cin.getline cin.get g ...

  10. OpenGL ES学习笔记(一)——基本用法、绘制流程与着色器编译

    首先声明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. 在Android.iOS等移动平台上 ...

随机推荐

  1. C++ 多线程的错误和如何避免(8)

    不要重复获取同一个锁 问题:在获得一个锁并且没有释放该锁的前提下,再次尝试获取该锁会报错. 比如, #include <iostream> #include <thread> ...

  2. win32--GetFileAttributes

    DWORD d = GetFileAttributes(path.c_str()); 根据返回的十进制,对比文件属性,来检索指定文件或目录的文件系统属性. 也可以使用 if ((d & FIL ...

  3. win32 - 使用VerQueryValue获得应用程序的名称

    比如: Google Chrome: 类似于任务管理器中显示名字,见下图 那么我们就需要使用VerQueryValue, 从指定的版本信息资源中检索指定的版本信息.若要检索适当的资源,在调用VerQu ...

  4. 【Android 逆向】【攻防世界】easyjava

    1. apk 安装到手机,提示输入flag 2. jadx 打开apk看看 private static char a(String str, b bVar, a aVar) { return aVa ...

  5. React Native如何每次唤醒APP都执行一段代码

    最近想要做一个类似于淘宝每次打开会根据用户剪贴板内容弹出对应商品的功能.要完成这个功能需要每次唤醒APP都读取一次剪贴板. 1.监听 && 销毁 1 async componentDi ...

  6. EF Invalid column name 'Discriminator' Invalid column name 'TagCode'.

    参考资料:Invalid column name 'TagCode'. 该异常和Discriminator没关系,一般原因:1.数据库中字段和实体类字段不一致导致的2.创建新增继承于数据库对应的实体类 ...

  7. JavaScript之原生ajax && jQuery之ajax

        ajax提供了异步访问服务器的方法,使页面无须刷新就可以更改页面内容,在实际情况中使用原生的情况较少但是原理需要掌握,一般都是使用jquey更轻量级的实现ajax但是原理是共同的.     原 ...

  8. 如何当个优秀的文档工程师?从 TC China 看技术文档工程师的自我修养

    本文系 NebulaGraph Community Academic 技术文档工程师 Abby 的参会观感,讲述了她在中国技术传播大会分享的收获以及感悟. 据说,技术内容领域.传播领域的专家和决策者们 ...

  9. 5. JVM虚拟机栈

    1.概述 说到jvm 其中让人印象最深的就是栈和堆,也是 jvm中占用内存最大的两个地方. 从宏观上来看栈是运行时的单位,而堆是存储的单位 ,栈解决程序的运行问题,即程序如何执行,或者说如何处理数据. ...

  10. Alertmanager钉钉告警

    一.部署alertmanager 1.1 创建目录 mkdir -p /deploy/app/alertmanager/config chmod -R 777 /deploy/app/alertman ...