簡體   English   中英

PostgreSQL-如果表中有數據,則刪除存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM