[英]PostgreSQL- If data in table, delete for stored procedure
我有這個過程,我用CALL pr_calc_quarter(2,2022)
調用它,它從查詢中將數據插入到表erp.tb_quarter
中。 我需要添加代碼來檢查表中是否已有數據,在插入新值之前將其刪除。
我正在考慮在開始時或插入之前插入代碼,但我不知道如何檢查表上是否已經有數據。
我只需要如何進行檢查,不需要工作演示:)。 我不知道插入之前的觸發器是否可以在這里與過程中的參數一起使用。
步驟:
CREATE OR REPLACE PROCEDURE pr_calc_quarter( trimestre INT , anio INT ) AS $$
DECLARE
v_cust_no CHARACTER(5);
v_iva_percent INT;
v_amount REAL;
BEGIN
FOR trimestre, anio, v_cust_no, v_iva_percent, v_amount IN
SELECT
EXTRACT(QUARTER FROM i.last_update_date) AS quarter,
EXTRACT(year FROM i.last_update_date) AS year,
c.cust_no,
round((i.iva_amount * 100 / net_amount)::numeric,0) AS iva_percent,
SUM(i.iva_amount) AS amount
FROM erp.tb_customer c JOIN erp.tb_invoice i ON i.cust_no = c. cust_no
WHERE EXTRACT(QUARTER FROM i.last_update_date) = trimestre AND EXTRACT(year FROM i.last_update_date) = anio
GROUP BY iva_percent, c.cust_no, year, quarter
ORDER BY c.cust_no, iva_percent, amount
LOOP
INSERT INTO erp.tb_quarter
VALUES (trimestre, anio, v_cust_no, v_iva_percent, v_amount);
END LOOP;
END;
$$ LANGUAGE plpgsql;
如果您總是想從表中刪除所有數據,那么總是這樣做
truncate erp.tb_quarter;
將其放在BEGIN
之后的下一行
如果您只想刪除計算范圍內的數據,請使用正確的where
delete
另外代替循環,您可以使用INSERT INTO ... SELECT FROM
構造
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.