mysql触发器select into 总是为空的问题

第一次写触发器。


实现的功能:


插入机构(bzsh_jg)的时候同步插入一条数据到control_unit表中。


先要根据隶属机构号(字段lsjgh)去查询父机构的数据,然后在插入的时候放入control_unit表的parentid这个字段。


代码如下:

delimiter $
create trigger bzsj_jg_insert
after insert on bzsh_jg
for each row 

begin

declare indexcode varchar(64);
declare controlunitname varchar(64);
declare parentid int;
declare unitlevel int;
declare paranetUnitLevel int;
declare strrev1 varchar(64);

set indexcode = new.jgh;
set controlunitname = new.jgmc;
set  strrev1 = new.lsjgh;

if new.lsjgh is null then
	
	set parentid = 0;
	set unitlevel = 0;
	
else

	select control_unit_id, unit_level  into parentid, paranetUnitLevel from control_unit where index_code = new.lsjgh;
	set unitlevel = paranetUnitLevel + 1;
	
end if;

insert into control_unit ( index_code, name, parent_id,unit_level,use_stream_sv,sequence_idx,operator_id, create_time,update_time,str_rev_1) 
									values ( indexcode, controlunitname,parentid,unitlevel, false,0,0,now(),now(),strrev1);

end$

测试的时候,parentid总是为空,把26行最后的new.lsjgh换成正常的数值就没问题了,比如:

select control_unit_id, unit_level  into parentid, paranetUnitLevel from control_unit where index_code = '123';


开始以为是select into 语句中不能传入 new的参数,调试好久才发现是字段长度的问题, control_unit 表的 index_code 长度 和 bzsh_jg 表中的 lsjgh 长度不一样,虽然都是varchar

index_code 是 varchar(64),lsjgh只有 varchar(20) ,插入bzsh_jg的时候lsjgh字段被自动截取为20个字符了,所以查到的结果为空。


结论:插入bzsh_jg表的时候lsjgh的长度被自动截取了,所以导致查出的数据为空.当字段类型不一致的情况,比如一个是int一个是varchar,也会出现这种情况。


顺便吐槽一下第三方公司的表命名和字段命名,全是拼音缩写,看的我蛋都碎了,太扯了。


你可能感兴趣的:(mysql,触发器)