использовать RETURNING-данные в другом выражении - PullRequest
2 голосов
/ 16 сентября 2010

Я хочу использовать данные 'theID' из оператора PostgreSQL-RETURNING

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 ...
                                                  ^

Спасибо, Тебас.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

К сожалению, вы не можете использовать операторы DML в этом месте. Вам нужно хранить данные в другом месте. (В настоящее время ведется работа над получением возможности использовать DML таким образом в PostgreSQL 9.1, но его сейчас нет).

На данный момент вы можете сохранить выходные данные INSERT .. RETURNING во временной таблице, а затем использовать ее в своем DELETE - просто не забудьте заключить ее в явную транзакцию ...

2 голосов
/ 16 сентября 2010

Нет, вы не можете, это еще не поддерживается. Используйте хранимую процедуру или ваше приложение, чтобы исправить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...