lan*_*rat 17 postgresql sql-insert sql-delete
我试图从一个表中删除一行,并将一些额外的数据插入另一个表.我知道这可以在两个单独的命令中完成,一个用于删除,另一个用于插入新表.但是我试图将它们组合起来并且它不起作用,这是我目前的查询:
insert into b (one,two,num) values delete from a where id = 1 returning one, two, 5;
运行时,我收到以下错误:
错误:"删除"或附近的语法错误
任何人都可以指出如何实现这一目标,还是有更好的方法?还是不可能?
Pet*_*aut 45
你不能在PostgreSQL 9.1之前做到这一点,它还没有发布.然后语法就是
WITH foo AS (DELETE FROM a WHERE id = 1 RETURNING one, two, 5)
INSERT INTO b (one, two, num) SELECT * FROM foo;
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL 9.1之前,您可以创建这样的volatile函数(未经测试):
create function move_from_a_to_b(_id integer, _num integer)
returns void language plpgsql volatile as
$$
declare
_one integer;
_two integer;
begin
delete from a where id = _id returning one, two into strict _one, _two;
insert into b (one,two,num) values (_one, _two, _num);
end;
$$
Run Code Online (Sandbox Code Playgroud)
然后使用select move_from_a_to_b(1, 5).函数优于两个语句,它总是在单个事务中运行 - 不需要在客户端代码中显式启动和提交事务.
| 归档时间: |
|
| 查看次数: |
12420 次 |
| 最近记录: |