注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL: 如何在另一个 SQL 中使用 "INSERT...RETURNING" 返回的值  

2013-03-13 10:22:00|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

         今天  bbs  里有人问到如何使用 "INSERT...RETURNING" 语句值的问题,目标想使用
array_append 数组函数追加 "INSERT...RETURNING" 返回的值。

目标的结果
 francs=> select array_append(array[1,2,3],insert into test_return (id) values (3) returning id);
ERROR:  syntax error at or near "into"
LINE 1: select array_append(array[1,2,3],insert into test_return (id...
   备注:当然这是行不通的,因为语法不支持,接下来测试下,看看是否有其它方法。
            
        在介绍之前,先来复习下 "INSERT...RETURNING" 的用法。
                  
--1 创建测试表,并测试返回插入的值
 francs=> create table test_return (id int4 primary key,name character(32));
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "test_return_pkey" for table "test_return"
CREATE TABLE

francs=> insert into test_return (id) values (1) returning id;
 id 
----
  1
(1 row)

INSERT 0 1

francs=> insert into test_return (id,name) values (2,'a') returning *;
 id |               name               
----+----------------------------------
  2 | a                               
(1 row)

INSERT 0 1

francs=> select * from test_return ;
 id |               name               
----+----------------------------------
  1 | 
  2 | a                               
(2 rows)
     备注:上面的结果已经很清晰了, returning 属性不但能返回指定的字段,也能返回插入的整行。
                且返回的数据类型和插入的数据类型对应。          
  
               回到开头的问题,如何使用 "INSERT...RETURNING" 语句返回的值呢,       

--2 使用 with 语句
 francs=> with temp_row as (
francs(> insert into test_return (id) values (3) returning id
francs(> )
francs-> select array_append(array[1,2,3],id) from temp_row;
 array_append 
--------------
 {1,2,3,3}
(1 row)
   备注:使用 "WITH QUERY" 语句先保存中间结果到表 temp_row,接下来可以使用 temp_row 
             的值进行 SELECT ,UPDATE,DELETE,INSERT 操作了。

--3 也能使用 "INSERT...RETURNING" 返回的值插入到另一个表
 francs=> truncate table test_1;
TRUNCATE TABLE

francs=> with temp_row as (
francs(> insert into test_return (id) values (6) returning id
francs(> )
francs-> insert into test_1 (id) select id from temp_row;
INSERT 0 1

francs=> select * From test_1;
 id | name 
----+------
  6 | 
(1 row)
   

--4 参考
http://www.postgresql.org/docs/9.2/static/queries-with.html
http://www.postgresql.org/docs/9.2/static/sql-insert.html

  评论这张
 
阅读(8865)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016