MySQL 存儲過程中,使用游標(biāo)查詢,返回的是結(jié)果集時,如何查看調(diào)用存儲過程輸出結(jié)果呢?
響水網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),響水網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為響水上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的響水做網(wǎng)站的公司定做!
解決方案:存儲過程不返回數(shù)據(jù),但它能創(chuàng)建和填充另一個表。所以在存儲過程運行中創(chuàng)建臨時表。該臨時表將保存存儲過程中生成的結(jié)果集,在遍歷游標(biāo)時,用insert保存每條數(shù)據(jù)到臨時表中。后續(xù)調(diào)用時可以用select語句查詢臨時表中的存儲過程運行結(jié)果。
以下有 三種方式 使用游標(biāo)創(chuàng)建一個存儲過程,統(tǒng)計某一部門下的員工信息
方法一:Loop循環(huán)
調(diào)用存儲過程:
方法二:While 循環(huán)
調(diào)用存儲過程:
方法三:REPEAT 循環(huán)
調(diào)用存儲過程:
上述三種實現(xiàn)方法在測試過程中遇到下述問題。
調(diào)用存儲過程查詢臨時表輸出結(jié)果時,會發(fā)現(xiàn)多循環(huán)了一次,像這樣:
解決方法:
在遍歷游標(biāo)查詢結(jié)果時,先判斷游標(biāo)的結(jié)束標(biāo)志(done) 是否是為1,如果不是1,則向臨時表中插入數(shù)據(jù)。
先聲明一個游標(biāo),語法:
DECLARE v_1 VARCHAR(16);
DECLARE v_2 VARCHAR(16);
DECLARE c_XXX CURSOR FOR
SELECT c_1, c_2
FROM t_1;
同時聲明一個布爾型的變量FOUND,當(dāng)循環(huán)的條件不成立時,結(jié)束循環(huán)用的。
DECLARE FOUND BOOLEAN DEFAULT TRUE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET FOUND = FALSE;
在使用游標(biāo)的時候,要先打開游標(biāo),語法:OPEN c_XXX;
使用的時候,要先打開游標(biāo),取出第一條數(shù)據(jù),語法: FETCH c_XXX INTO v_1, v_2;
然后才開始執(zhí)行循環(huán),語法:WHILE FOUND DO
執(zhí)行需要執(zhí)行的語句;
取下一條數(shù)據(jù)放到當(dāng)前游標(biāo)中,F(xiàn)ETCH c_XXX INTO v_1, v_2;
結(jié)束循環(huán),語法:END WHILE;
結(jié)束游標(biāo),語法:CLOSE c_cargo。有什么問題我們再溝通啊。不知道你具體要問題的是什么。
cursor_sharing string EXACT
cursor_space_for_time boolean TRUE
open_cursors integer 300
session_cached_cursors integer 0
游標(biāo)超出一般是由于應(yīng)用中沒有關(guān)閉游標(biāo)造成的
當(dāng)前標(biāo)題:怎么看mysql的游標(biāo) 在mysql中游標(biāo)包括兩部分
分享網(wǎng)址:http://muchs.cn/article26/dogiscg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、外貿(mào)建站、網(wǎng)站設(shè)計公司、網(wǎng)站排名、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容