在另一个语句中使用RETURNING-data

时间:2010-09-16 13:50:59

标签: sql postgresql

我想使用PostgreSQL-RETURNING语句中的数据'theID'

INSERT INTO ... RETURNING theID;

在另一个声明中。如何做到这一点(没有游标)?

我的完整陈述(复制一些数据并从源表中删除它们; tab1& tab2定义相同):

DELETE FROM tab1 WHERE tab1id IN 
  (
  INSERT INTO tab2 
    SELECT * FROM tab1 WHERE ?something? 
  RETURNING tab2id
  );

错误消息:

ERROR:  Syntaxerror near »INTO«
LINE 7: DELETE FROM tab1 WHERE tab1id IN (INSERT INTO tab2 SELECT * FROM ...
                                                  ^

谢谢,Tebas。

2 个答案:

答案 0 :(得分:2)

不,你不能,它还没有得到支持。使用存储过程或应用程序来解决问题。

答案 1 :(得分:2)

不幸的是,您无法在此位置使用DML语句。您需要将数据存储在其他位置。 (正在开展工作以获得将这样的DML用于PostgreSQL 9.1的能力,但现在还没有。)

现在,您可以将INSERT .. RETURNING的输出存储到临时表中,然后在DELETE中使用它 - 只需记住将其包装在显式事务中......