我有一个准备语句,它使用执行多次调用。
为了节省数据库连接成本,我们进行了一个大查询,如:
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的注释)
没有任何其他关于你的完整场景的细节,我不能告诉你更多,但你应该得到这个想法。