我从Postgres到MySQL进行了数据库迁移,现在我无法将触发器转换为这个新的数据库引擎。 Postgres触发功能如下:
CREATE OR REPLACE FUNCTION ins_stk_dt_in_lgr_frm_purchase_entry()
RETURNS trigger AS
$BODY$
declare
stocid integer;
rec record;
rec1 record;
dt date;
begin
dt = now()::date;
for rec in
select a.trnpurenthdid,c.productid,b.prodserialno as serial_no,b.prodbatchno,b.qty as qtyrecd,a.uom,b.warranty_date,b.exp_date from trnpurentdet a
join trnpurentdet2 b on a.trnpurentdetid = b.trnpurentdet1id
join mstproductdet c on c.productdetid=a.productpetid
where trnpurentdet2id = new.trnpurentdet2id
loop
if(rec.serial_no <> '') then
insert into stock_leger (leger_date,io_flag,transtype,referdoctno,product_id,serialno,systemremark,qty,uom,expiry_date,warrenty_date) values (dt,1,'PE',rec.trnpurenthdid,rec.productid,rec.serial_no,'PUR_ENT',rec.qtyrecd,rec.uom,rec.exp_date,rec.warranty_date);
end if;
if(rec.prodbatchno <> '') then
insert into stock_leger (leger_date,io_flag,transtype,referdoctno,product_id,batchno,systemremark,qty,uom,expiry_date,warrenty_date) values (dt,1,'PE',rec.trnpurenthdid,rec.productid,rec.prodbatchno,'PUR_ENT',rec.qtyrecd,rec.uom,rec.exp_date,rec.warranty_date);
end if;
end loop;
return new;
end;
$BODY$;
如何将此触发器更改为mysql格式?
答案 0 :(得分:0)
DELIMITER //
CREATE TRIGGER ins_stk_dt_in_lgr_frm_purchase_entry
AFTER INSERT on trnpurentdet2 for each row BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a1,b1,e1,f1 INT;
DECLARE c1,d1 varchar(50);
DECLARE dt,g1,h1 date;
DECLARE rec CURSOR FOR SELECT a.trnpurenthdid,c.productid,b.prodserialno as serial_no,b.prodbatchno,b.qty as qtyrecd,a.uom,b.warranty_date,b.exp_date from trnpurentdet a
join trnpurentdet2 b on a.trnpurentdetid = b.trnpurentdet1id
join mstproductdet c on c.productdetid=a.productpetid
where trnpurentdet2id = NEW.trnpurentdet2id;
set dt = curdate();
OPEN rec;
ins_loop: LOOP
FETCH rec INTO a1, b1, c1,d1,e1,f1,g1,h1;
IF done THEN
LEAVE ins_loop;
END IF;
IF(c1 <> '') THEN
INSERT into stock_leger (leger_date,io_flag,transtype,referdoctno,product_id,serialno,systemremark,qty,uom,expiry_date,warrenty_date) values (dt,1,'PE',a1,b1,c1,'PUR_ENT',e1,f1,g1,h1);
ELSE
INSERT into stock_leger (leger_date,io_flag,transtype,referdoctno,product_id,batchno,systemremark,qty,uom,expiry_date,warrenty_date) values (dt,1,'PE',a1,b1,d1,'PUR_ENT',e1,f1,g1,h1);
END IF;
END LOOP;
CLOSE rec;
END;//
DELIMITER;