我有一个名为run_proc
的存储过程,它调用了另外三个存储过程,其中一个存储过程的结果作为参数执行另一个存储过程:
CREATE OR REPLACE PROCEDURE run_proc() LANGUAGE plpgsql AS $$ DECLARE
_store RECORD;
_date RECORD; BEGIN
CALL sp1();
FOR _store IN SELECT * FROM temp_stores
LOOP
CALL sp2(_store.store_id);
-- Check if temp_year_month has any data
IF EXISTS (SELECT 1 FROM temp_year_month) THEN
FOR _date IN SELECT * FROM temp_year_month
LOOP
CALL sp3(_store.store_id, _date.year_month);
END LOOP;
END IF;
-- Drop dates table after use
DROP TABLE temp_year_month;
END LOOP;
-- Don't forget to drop the tenants table when done
DROP TABLE temp_stores; END; $$
字符串
上面的过程可以正常工作,但是在temp_stores包含大约1000条记录的情况下,上面的存储过程执行并将结果一次性提交到DB中(sp3包含一些inserts/update语句),我如何才能使temp_stores
中的每个_store
值单独提交到DB中,因为PostgreSQL不支持自治事务,有什么方法可以处理?
1条答案
按热度按时间baubqpgj1#
字符串
使用这个PL/pgSQL函数,由于使用了FOR控制结构,temp_stores的每个_store值都将单独提交给数据库... LOOP以及开始和END块中SP调用的分组。每次迭代都将作为PL/pgSQL函数上下文中的一个单独事务,允许您为每个in _store值独立运行SP并将更改提交到数据库。