我有一个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语句的结果。
有没有办法可以将这些结果存储在临时表中并获得所有结果?
答案 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中的注释)
如果没有关于完整场景的任何其他详细信息,我无法告诉您更多信息,但您应该明白这一点。