久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql存儲過程基礎之遍歷多表記錄后插入第三方表中的示例分析

138次閱讀
沒有評論

共計 2907 個字符,預計需要花費 8 分鐘才能閱讀完成。

這篇文章主要介紹 mysql 存儲過程基礎之遍歷多表記錄后插入第三方表中的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

前言

自從學過存儲過程后,就再也沒有碰過存儲過程,這是畢業后寫的第一個存儲過程。

因為項目里設備的種類比較多,分別存在不同的數據表中,java 中對應不同的 java bean 對象,想要統一管理有點困難。最近正好要開發一個功能模塊,就是需要統一對設備進行處理,想著為了以后都能方便的統一處理各種設備,就從現在開始設計一套方案管理起這些項目吧。

如何統一管理呢?

如果從項目一開始設計的時候就能考慮到項目會發展成今天這樣,當初就應該抽取公共父類,對所有類型的所有公共字段進行統一抽取,這樣無論添加多少模塊,需要對設備進行操作的時候,都只需要關聯統一父類,數據間的關系就清晰多了,開發也會簡單很多。

那么現在抽取呢?還來得及嗎?

應該是來不及了,因為項目已經發展壯大了,已經開發了很多功能,一旦現在抽取,需要修改的地方就太多了,沒有那么多時間來完成這項工作。

那還有別的方法嗎?

我也不曉得人家的項目是如何處理這樣的問題的,但是就我思考,可以學習下注冊表的思想,電腦中裝有很多很多的軟件,各個軟件也是各部相同,但是每個軟件安裝的時候都會寫一條信息到注冊表中,方便電腦對軟件的集中管理。是不是感覺這個方案還不錯

項目里需要做的就是:1、添加一個注冊表對象;2、添加設備的時候,都要把公共的很重要的信息寫到注冊表中,更新和刪除也要同步操作注冊表;3、一個很重要的工作,曾經已經添加到項目中的設備信息要怎么辦呢?他們都沒有注冊信息,難不成要放棄對他們的管理?或者是刪除重新添加?不!!!只需要寫一個存儲過程,遍歷表里已經存在的設備信息,將其插入注冊表中。

好了,人生第一個存儲過程就這樣拉開序幕了,下面要亮出我的第一個存儲過程了:

寫的過程中呢肯定是有遇到各種問題的

首先,不記得有哪些循環語句了,下面科普一下

第一種 while 循環

while 循環語法:

while 條件 DO

  循環體;

end while;

第二種 loop 循環

loop 循環語法:

loop_name:loop

  if 條件 THEN — 滿足條件時離開循環

  leave loop_name;  — 和 break 差不多都是結束訓話

  end if;

end loop;

第三種 repeat 循環

repeat 循環語法

repeat

  循環體

until 條件 end repeat;

  其次,遇到一個問題,循環的時候,最后一條記錄總是被執行了兩次。

一開始使用的是 repeat 循環體,以為是因為還沒有判斷就執行了,肯定是不對的,應該先判斷,再執行,以為換一種循環語句便可以了

原先是這樣的

后來改成了這樣

看著沒毛病吧,是先判斷后做的,但是結果還是不對,仔細研究了一下,發現,當游標走到最后一行的時候,執行 insert 沒錯,但是這個時候的標記值依然是正常的,會再進入循環體,這個時候再去 fetch 下一個游標的時候,就獲取不到了,標記值會發生改變,但是插入語句依然執行了,執行后,下一次循環才不符合條件,跳出的循環,因此,應該是游標下移一行后進行判斷,比如在 fetch 語句后面加一句 if 判斷,或者是像下面這樣,先移動游標,再判斷插入

最后貼上代碼吧,方便以后自己復制粘貼,不是有句話叫”天下代碼一大抄,看你會不會抄“,其實開發的日常也就是復制粘貼啦

BEGIN 
 DECLARE dsi_id LONG;
 DECLARE dsi_name varchar(300);
 DECLARE dsi_areaid LONG;
 DECLARE dsi_orgzid LONG;
 DECLARE dsi_clazz varchar(300);
 
 declare no_more_departments integer DEFAULT 0;
 DECLARE cursor_employee CURSOR FOR
 SELECT
 dsi.id,
 dsi.inputname,
 dsi.deviceArea_id,
 sd.organization_id,
  DeviceSwitchInfo 
 FROM
 tip_s_deviceswitchinfo dsi
 LEFT JOIN tip_s_systemdeviceinfo sd ON dsi.Device_id = sd.id
 UNION SELECT
 dsi.id,
 dsi.outputname,
 dsi.deviceArea_id,
 sd.organization_id,
  DeviceSwitchOutPut 
 FROM
 tip_s_DeviceSwitchOutPut dsi
 LEFT JOIN tip_s_systemdeviceinfo sd ON dsi.Device_id = sd.id
 UNION SELECT
 dsi.id,
 dsi.analogname,
 dsi.deviceArea_id,
 sd.organization_id,
  AnalogInputInfo 
 FROM
 tip_s_AnalogInputInfo dsi
 LEFT JOIN tip_s_systemdeviceinfo sd ON dsi.Device_id = sd.id
 UNION SELECT
 dsi.id,
 dsi.devicename,
 dsi.area_id,
 sd.organization_id,
  SmartDeviceInfo 
 FROM
 tip_smart_deviceinfo dsi
 LEFT JOIN tip_s_systemdeviceinfo sd ON dsi.deviceid = sd.id;

 DECLARE CONTINUE HANDLER FOR NOT FOUND   SET no_more_departments = 1;  OPEN cursor_employee;    FETCH cursor_employee INTO dsi_id, dsi_name, dsi_areaid, dsi_orgzid, dsi_clazz;  WHILE !no_more_departments DO  INSERT INTO tip_m_deviceregister (  deviceId, NAME, area_id, orgz_id, deviceClass, active, version  )  VALUES (dsi_id, dsi_name, dsi_areaid, dsi_orgzid, dsi_clazz, 1, 1);  FETCH cursor_employee INTO dsi_id, dsi_name, dsi_areaid, dsi_orgzid, dsi_clazz;  END WHILE;  CLOSE cursor_employee; END

以上是“mysql 存儲過程基礎之遍歷多表記錄后插入第三方表中的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計2907字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 海林市| 建宁县| 江北区| 瓮安县| 绩溪县| 灯塔市| 济阳县| 罗甸县| 郴州市| 邵东县| 青河县| 清河县| 东港市| 米易县| 张家界市| 建瓯市| 潮安县| 元江| 射阳县| 元谋县| 刚察县| 互助| 玛纳斯县| 阿克陶县| 新巴尔虎左旗| 当涂县| 涞源县| 蚌埠市| 林周县| 永丰县| 子长县| 林甸县| 通道| 兴国县| 精河县| 永泰县| 济宁市| 瓮安县| 松桃| 渭源县| 晋州市|