RETURNING INTO语句介绍
1. RETURNING INTO简介
RETURNING INTO语句是Oracle PL中的一种语法,它指定变量存储SQL语句的返回值。RETURNING INTO经常和delete,update,insert语句结合使用,举个例子如下:
UPDATE table_name SET expr1
RETURNING column_name INTO xxx
上面的例子中,update语句执行后,RETURNING语句将列名为column_name的列中的数值保存在xxx变量中。对于delte,update和insert语句,RETURNING INTO返回的内容有些不同:INSERT返回插入后的值;DELETE返回删除前的值;UPDATE返回更新后的值。
在oracle 12c官方描述中的RETURNING INTO语义如下:
官方描述比较详细,但很多内容和PL相关,就不做具体的介绍了,感兴趣的同学可以参考官方文档。想要简单使用看懂上面的例子就可以了。
2. OceanBase中的RETURNING INTO
本文主要介绍在OceanBase的SQL层中实现的RETURNING INTO语法,这个语法是OceanBase独有的,可以在MySQL客户端使用,也可以供OceanBase的PL模块调用,使用它可以实现和Oracle的RETURNING INTO相同的功能。具体语法定义如下:
RETURNING column_list
column_list:
column_expr [, column_expr] ...
其中column_expr表示和列名相关的表达式。该语法由RETURNING关键字和一系列和列名有关的表达式组成。该语法支持返回一行或者多行的数据,对于SQL客户端直接展示,对于PL需要相应类型的数据结构存储。
3. 使用示例
通过对表test的操作展示RETURNING INTO的效果。创建表的语句如下:
CREATE TABLE TEST(c1 int PRIMARY KEY, c2 int);
3.1 INSERT RETURNING使用示例
INSERT RETURNING单行的例子如下:
INSERT RETURNING多行的例子如下:
REPLACE RETURNING的例子如下:
3.2 UPDATE RETURNING使用示例
UPDATE RETURNING的例子如下:
3.3 DELETE RETURNING使用示例
DELETE RETURNING的例子如下:
4. 总结
RETURNING INTO是PL模块一个重要的功能,它的功能类似DELETE/UPDATE/INSERT + SELECT语句,它使PL程序更加的高效和简洁,也使SQL由两条变成一条,性能得到提高。同时OceanBase的SQL也实现了自定义的RETURNING语句,这使OceanBase的SQL功能更加的强大。
本文转载自公众号OceanBase