最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql存儲過程基礎(chǔ)之遍歷多表記錄后插入第三方表中詳解

 更新時間:2018年07月13日 10:16:17   作者:1156740846  
這篇文章主要給大家介紹了關(guān)于mysql存儲過程教程之遍歷多表記錄后插入第三方表中的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧

前言

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

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

如何統(tǒng)一管理呢?

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

那么現(xiàn)在抽取呢?還來得及嗎?

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

那還有別的方法嗎?

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

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

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

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

首先,不記得有哪些循環(huán)語句了,下面科普一下

第一種 while 循環(huán)

while循環(huán)語法:

while 條件 DO

            循環(huán)體;

end while;

第二種 loop 循環(huán)

loop 循環(huán)語法:

loop_name:loop

        if 條件 THEN -- 滿足條件時離開循環(huán)

                leave loop_name;  -- 和 break 差不多都是結(jié)束訓(xùn)話

        end if;

end loop;

第三種 repeat 循環(huán)

repeat 循環(huán)語法

repeat

    循環(huán)體

until 條件 end repeat;

 其次,遇到一個問題,循環(huán)的時候,最后一條記錄總是被執(zhí)行了兩次。

一開始使用的是repeat循環(huán)體,以為是因為還沒有判斷就執(zhí)行了,肯定是不對的,應(yīng)該先判斷,再執(zhí)行,以為換一種循環(huán)語句便可以了

原先是這樣的

后來改成了這樣

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

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

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • MySQL binlog日志記錄格式寫入機制及相關(guān)參數(shù)講解

    MySQL binlog日志記錄格式寫入機制及相關(guān)參數(shù)講解

    這篇文章主要為大家介紹了MySQL binlog日志記錄格式寫入機制及相關(guān)參數(shù)使用講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • clickhouse復(fù)雜時間格式的轉(zhuǎn)換方式

    clickhouse復(fù)雜時間格式的轉(zhuǎn)換方式

    這篇文章主要介紹了clickhouse復(fù)雜時間格式的轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • mysql下載與安裝過程詳解

    mysql下載與安裝過程詳解

    這篇文章主要介紹了mysql下載與安裝過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Can't connect to MySQL server on localhost (10061)解決方法

    Can't connect to MySQL server 

    今天在安裝mysql后使用mysql命令連接mysql時報錯?Can't connect to MySQL server on localhost (10061),一般是因為mysql服務(wù)沒有啟動或者用戶名密碼不正確
    2011-03-03
  • 解決MySQL報錯:The last packet sent successfully to the server was 0 milliseconds ago.

    解決MySQL報錯:The last packet sent successfu

    這篇文章主要介紹了解決MySQL報錯:The last packet sent successfully to the server was 0 milliseconds ago問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL 百萬級分頁優(yōu)化(Mysql千萬級快速分頁)

    MySQL 百萬級分頁優(yōu)化(Mysql千萬級快速分頁)

    MySql 性能到底能有多高?用了php半年多,真正如此深入的去思考這個問題還是從前天開始。有過痛苦有過絕望,到現(xiàn)在充滿信心
    2012-11-11
  • MySQL 數(shù)據(jù)庫 ALTER命令講解

    MySQL 數(shù)據(jù)庫 ALTER命令講解

    MySQL 為關(guān)系型數(shù)據(jù)庫(Relational Database Management System)。本文重點給大家介紹mysql數(shù)據(jù)庫alert命令講解,本文介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-05-05
  • mysql如何將一個列按逗號分割為多列

    mysql如何將一個列按逗號分割為多列

    在MySQL中,將一個列按逗號分割為多列可以通過使用SUBSTRING_INDEX()函數(shù)和CROSS JOIN操作實現(xiàn),本文提供了一個實用的方法,通過創(chuàng)建數(shù)字序列和臨時表來拆分tags列并計數(shù)每個標簽的出現(xiàn)次數(shù),適用于處理有限數(shù)量的標簽值
    2024-09-09
  • mariadb集群搭建---Galera Cluster+ProxySQL教程

    mariadb集群搭建---Galera Cluster+ProxySQL教程

    這篇文章主要介紹了mariadb集群搭建---Galera Cluster+ProxySQL教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 關(guān)于mysql中string和number的轉(zhuǎn)換問題

    關(guān)于mysql中string和number的轉(zhuǎn)換問題

    這篇文章主要介紹了關(guān)于mysql中string和number的轉(zhuǎn)換問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

十堰市| 青铜峡市| 兴国县| 同江市| 枞阳县| 莱西市| 公安县| 西乌珠穆沁旗| 屏东县| 航空| 呼和浩特市| 万全县| 陈巴尔虎旗| 农安县| 永定县| 临泽县| 会泽县| 乐至县| 武汉市| 屏东市| 象山县| 通化县| 年辖:市辖区| 环江| 巴中市| 微博| 大姚县| 神农架林区| 永顺县| 章丘市| 沂源县| 会泽县| 蒲城县| 浦江县| 修文县| 九江市| 天门市| 忻州市| 大悟县| 金平| 新密市|