PostgreSQL- 如果 table 中的数据,则为存储过程删除
PostgreSQL- If data in table, delete for stored procedure
我有这个过程,我用 CALL pr_calc_quarter(2,2022)
调用它,它从查询中将数据插入到 table erp.tb_quarter
中。
我需要添加代码来检查 table 中是否已有数据,以便在插入新值之前将其删除。
我想在开头或插入之前插入代码,但我不知道
如何检查 table.
上是否已经有数据
我只需要如何进行检查,不需要工作演示 :)。我不知道 trigger before insert 是否可以在这里使用过程中的参数。
程序:
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;
如果您总是想从 table 中删除所有数据,那么只需始终
truncate erp.tb_quarter;
放在BEGIN
之后的下一行
如果您只想删除计算范围内的数据,请使用 where
delete
此外,您可以使用 INSERT INTO ... SELECT FROM
构造
代替循环
Example
我有这个过程,我用 CALL pr_calc_quarter(2,2022)
调用它,它从查询中将数据插入到 table erp.tb_quarter
中。
我需要添加代码来检查 table 中是否已有数据,以便在插入新值之前将其删除。
我想在开头或插入之前插入代码,但我不知道 如何检查 table.
上是否已经有数据我只需要如何进行检查,不需要工作演示 :)。我不知道 trigger before insert 是否可以在这里使用过程中的参数。
程序:
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;
如果您总是想从 table 中删除所有数据,那么只需始终
truncate erp.tb_quarter;
放在BEGIN
如果您只想删除计算范围内的数据,请使用 where
delete
此外,您可以使用 INSERT INTO ... SELECT FROM
构造
Example