我有一个准备语句,它使用执行多次调用。
为了节省数据库连接成本,我们进行了一个大查询,如:

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

并发送到数据库。
但是,我只得到最后一个EXECUTE语句的结果。
有没有办法把这些结果存储在一个临时表中并得到所有的结果?

最佳答案

您可以使用事务和临时表。并执行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的注释)
没有任何其他关于你的完整场景的细节,我不能告诉你更多,但你应该得到这个想法。

10-06 04:13