您的位置:首页 > 数据库 > MySQL

MYSQL主从表插入,使用存储过程

2015-08-13 16:31 731 查看
-- MYSQL主从表插入数据使用存储过程

-- 存储过程

drop procedure if exists addRow; -- 存在即删除

create procedure addRow(

in t_enterprise_keyid int,

in number varchar(50),

in serial varchar(50),

in date date,

in type varchar(255),

in man varchar(100),

in operator varchar(100),

in remark varchar(255),

in state varchar(50),

Qualification varchar(21845)

) -- 定义参数

begin

declare i int ;

declare Start1 int;

declare Length int ;

declare TotalLenght int ;

declare number0 int ;

declare comma int ;

declare casenum int ;

declare filed varchar(100) ;

declare number1 int ;

declare number2 varchar(50) ;

declare number3 varchar(100) ;

declare number4 varchar(100) ;

declare number5 varchar(50) ;

declare number6 varchar(30) ;

declare number7 int ;

declare number8 varchar(100) ;

declare number9 decimal(10) ;

declare number10 decimal(10) ;

declare number11 decimal(10) ;

declare number12 decimal(10) ;

declare number13 varchar(255) ;

declare number14 varchar(255) ;

declare stmtNovelSearch varchar(2000) ;

set i=1;

set Start1=1;

set Length=0;

set comma=0;

set TotalLenght=length(Qualification); -- 计算输入参数长度

insert into t_inorder(t_enterprise_keyid,number,serial,date,type,man,operator,remark,state) values (t_enterprise_keyid,number,serial,date,type,man,operator,remark,state);

set number0=LAST_INSERT_ID();

select TotalLenght;

while i <=TotalLenght do -- i=1 开始 -- select SUBSTRING(Qualification,i,1);

if(SUBSTRING(Qualification,i,1)=',') -- 注意 mysql 的substring函数截取字符串是从1开始的,而不是0 与java JavaScript不同。

-- 从第i位开始截取一个字符,看是否等于,

then

set comma=comma+1;

set filed=SUBSTRING(Qualification,Start1,Length); -- 从start1开始截取length长度的字符

select filed;

set casenum=comma%14;

case casenum

when 0 then

set number14=filed;

insert into t_inorder_detail(t_inorder_keyid,t_goods_keyid,t_goods_serial,t_goods_name,t_goods_standard,t_goods_colour,t_goods_unit,t_warehouse_keyid,t_warehouse_name,in_count,out_count,plan_count,price,batch,remark) values (number0,number1,number2,number3,number4,number5,number6,number7,number8,number9,number10,number11,number12,number13,number14);

when 1 then

set number1=filed;

when 2 then

set number2=filed;

when 3 then

set number3=filed;

when 4 then

set number4=filed;

when 5 then

set number5=filed;

when 6 then

set number6=filed;

when 7 then

set number7=filed;

when 8 then

set number8=filed;

when 9 then

set number9=filed;

when 10 then

set number10=filed;

when 11 then

set number11=filed;

when 12 then

set number12=filed;

when 13 then

set number13=filed;

-- else

end case;

set Start1=i+1;

set Length=0;

else

set Length=Length+1; -- 如果不是, 则截取的长度加1

end if;

set i=i+1;

end while;

end -- 调用存储过程 字段名以,分隔 注意最后 , 结尾 call

-- 使用存储过程

set @t_enterprise_keyid = 1001;

set @number = 'SA20150813121627';

set @serial = '商品编号';

set @date = '2015-08-11';

set @type = '入库类型';

set @man = '检验人';

set @operator = '操作人';

set @remark = '备注';

set @state = '单据状态';

set @Qualification='1001,商品编号,商品名称,商品规格,商品颜色,商品单位,11,仓库名称,10,10,10,100,入库批次,备注,1002,商品编号2,商品名称2,商品规格2,商品颜色2,商品单位,22,仓库名称2,20,20,20,200,入库批次2,备注2,1003,商品编号3,商品名称3,商品规格3,商品颜色3,商品单位,33,仓库名称3,30,30,30,300,入库批次3,备注3,';

call addRow(@t_enterprise_keyid,@number,@serial,@date,@type,@man,@operator,@remark,@state,@Qualification);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: