自己用的一个mysql存储过程

“`
BEGIN
DECLARE main_billno VARCHAR(45);
DECLARE main_id INT DEFAULT 0;
DECLARE main_fid VARCHAR(45);
DECLARE done INT DEFAULT 0;
DECLARE rs CURSOR FOR
SELECT id,fbillno FROM stockbill;
DECLARE rs2 CURSOR FOR
SELECT DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=’inventory’ AND table_name=’entry’ AND COLUMN_NAME=’fbillno’;
DECLARE rs_entry CURSOR FOR
SELECT fid,fwarehouse,fwarehouse2,fdeptid,fpricetype FROM entry;
DECLARE rs_icitem CURSOR FOR
SELECT id,fid FROM icitem;
DECLARE rs_warehouse CURSOR FOR
SELECT id,fid FROM warehouse;
DECLARE rs_dept CURSOR FOR
SELECT id,fid FROM department;
DECLARE rs_pricetype CURSOR FOR
SELECT id,fid FROM pricetype;
DECLARE rs_measureunits CURSOR FOR
SELECT id,fid FROM measureunits;
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET done=1;

set done=0;
open rs2;
FETCH rs2 INTO main_fid;
if main_fid=’varchar’ then
ALTER TABLE inventory.entry ADD COLUMN tempno INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER fpricetype,
ADD COLUMN tempfid INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER tempno,
ADD COLUMN tempfwarehouse INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER tempfid,
ADD COLUMN tempfdeptid INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER tempfwarehouse,
ADD COLUMN tempfwarehouse2 INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER tempfdeptid,
ADD COLUMN tempfpricetype INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER tempfwarehouse2;

    set done=0;

OPEN rs;
FETCH NEXT FROM rs INTO main_id,main_billno;
REPEAT
update entry set tempno=main_id where fbillno=main_billno;
FETCH NEXT FROM rs INTO main_id,main_billno;
UNTIL done END REPEAT;
CLOSE rs;

/end process stockbill/
set done=0;
OPEN rs_icitem;
FETCH NEXT FROM rs_icitem INTO main_id,main_fid;
REPEAT
update entry set tempfid=main_id where fid=main_fid;
FETCH NEXT FROM rs_icitem INTO main_id,main_fid;
UNTIL done END REPEAT;
close rs_icitem;
/end process entry/
set done=0;
OPEN rs_warehouse;
FETCH NEXT FROM rs_warehouse INTO main_id,main_fid;
REPEAT
update entry set tempfwarehouse=main_id where fwarehouse=main_fid;
update entry set tempfwarehouse2=main_id where fwarehouse2=main_fid;
FETCH NEXT FROM rs_warehouse INTO main_id,main_fid;
UNTIL done END REPEAT;
close rs_warehouse;
/end process entry/
set done=0;
OPEN rs_dept;
FETCH NEXT FROM rs_dept INTO main_id,main_fid;
REPEAT
update entry set tempfdeptid=main_id where fdeptid=main_fid;
FETCH NEXT FROM rs_dept INTO main_id,main_fid;
UNTIL done END REPEAT;
close rs_dept;
/end process entry/
set done=0;
OPEN rs_pricetype;
FETCH NEXT FROM rs_pricetype INTO main_id,main_fid;
REPEAT
update entry set tempfpricetype=main_id where fpricetype=main_fid;
FETCH NEXT FROM rs_pricetype INTO main_id,main_fid;
UNTIL done END REPEAT;
close rs_pricetype;
/end process entry/
ALTER TABLE inventory.entry DROP COLUMN fbillno,
DROP COLUMN fid,
DROP COLUMN fwarehouse,
DROP COLUMN fdeptid,
DROP COLUMN fwarehouse2,
DROP COLUMN fpricetype,
DROP INDEX Index_2,
ADD INDEX Index_2 USING BTREE(remark, fdate, fname),
DROP INDEX Index_4,
ADD INDEX Index_4 USING BTREE(fyear, fperiod);

ALTER TABLE inventory.entry ADD COLUMN fbillno INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER id,
ADD COLUMN fid INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER fbillno,
ADD COLUMN fdeptid INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER fid,
ADD COLUMN fwarehouse INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER fdeptid,
ADD COLUMN fwarehouse2 INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER fwarehouse,
ADD COLUMN fpricetype INTEGER UNSIGNED NOT NULL DEFAULT 0 AFTER fwarehouse2;

update entry set fbillno=tempno,fid=tempfid,fdeptid=tempfdeptid,fwarehouse=tempfwarehouse,fwarehouse2=tempfwarehouse2,fpricetype=tempfpricetype;

ALTER TABLE inventory.entry DROP COLUMN tempno,
DROP COLUMN tempfid,
DROP COLUMN tempfwarehouse,
DROP COLUMN tempfdeptid,
DROP COLUMN tempfwarehouse2,
DROP COLUMN tempfpricetype;

end if;
close rs2;
END

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lwprain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值