PostgreSQL结合了多个EXECUTE语句

时间:2015-09-09 15:40:28

标签: sql postgresql

我有一个PREPARE语句,使用EXECUTE多次调用。 为了节省数据库连接成本,我们提出了一个大查询:

PREPARE updreturn as update myTable set col1 = 1 where col2= $1 returning col3;
EXECUTE updreturn(1);
EXECUTE updreturn(2);
....
EXECUTE updreturn(10);

并发送到数据库。 但是,我只得到最后一个EXECUTE语句的结果。

有没有办法可以将这些结果存储在临时表中并获得所有结果?

2 个答案:

答案 0 :(得分:1)

我认为你需要一个黑客。

  • 创建一个char表来存储结果
  • 在更新result
  • 之前创建trigger
  • 在触发器内添加myTable

因此,每次更新INSERT INTO result VALUES(col3)行时,值都会插入myTable

答案 1 :(得分:1)

您可以使用事务和临时表。并执行3个查询:

查询1:启动交易(我不知道您使用什么来连接数据库)。

查询2:

-- Create a Temporary Table to store the returned values
CREATE TEMPORARY TABLE temp_return (
    col3    text
) ON COMMIT DROP;

-- Prepare the Statement
PREPARE updreturn AS 
    WITH u AS (
        UPDATE myTable SET col1 = 1 WHERE col2= $1 RETURNING col3
    )
    INSERT INTO temp_return (col3) SELECT col3 FROM u;

EXECUTE updreturn(1);
EXECUTE updreturn(2);
.....
EXECUTE updreturn(10);

-- Deallocate the Statement
DEALLOCATE updreturn;

-- Actually return the results
SELECT * FROM temp_return;

查询3:提交交易(请参阅查询1中的注释

如果没有关于完整场景的任何其他详细信息,我无法告诉您更多信息,但您应该明白这一点。