mysql觸發器select into 老是爲空的問題

第一次寫觸發器。sql


實現的功能:xcode


插入機構(bzsh_jg)的時候同步插入一條數據到control_unit表中。測試


先要根據隸屬機構號(字段lsjgh)去查詢父機構的數據,而後在插入的時候放入control_unit表的parentid這個字段。調試


代碼以下:code

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';it


開始覺得是select into 語句中不能傳入 new的參數,調試很久才發現是字段長度的問題, control_unit 表的 index_code 長度 和 bzsh_jg 表中的 lsjgh 長度不同,雖然都是varcharzsh

index_code 是 varchar(64),lsjgh只有 varchar(20) ,插入bzsh_jg的時候lsjgh字段被自動截取爲20個字符了,因此查到的結果爲空。class


結論:插入bzsh_jg表的時候lsjgh的長度被自動截取了,因此致使查出的數據爲空.當字段類型不一致的狀況,好比一個是int一個是varchar,也會出現這種狀況。stream


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

相關文章
相關標籤/搜索