第一次寫觸發器。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
順便吐槽一下第三方公司的表命名和字段命名,全是拼音縮寫,看的我蛋都碎了,太扯了。