日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
mysql游標(biāo)怎么跳出來(lái) MySQL定義游標(biāo)

MySQL 存儲(chǔ)過(guò)程,獲取使用游標(biāo)查詢的結(jié)果集

MySQL 存儲(chǔ)過(guò)程中,使用游標(biāo)查詢,返回的是結(jié)果集時(shí),如何查看調(diào)用存儲(chǔ)過(guò)程輸出結(jié)果呢?

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計(jì),賀州網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:賀州等地區(qū)。賀州做網(wǎng)站價(jià)格咨詢:18982081108

解決方案:存儲(chǔ)過(guò)程不返回?cái)?shù)據(jù),但它能創(chuàng)建和填充另一個(gè)表。所以在存儲(chǔ)過(guò)程運(yùn)行中創(chuàng)建臨時(shí)表。該臨時(shí)表將保存存儲(chǔ)過(guò)程中生成的結(jié)果集,在遍歷游標(biāo)時(shí),用insert保存每條數(shù)據(jù)到臨時(shí)表中。后續(xù)調(diào)用時(shí)可以用select語(yǔ)句查詢臨時(shí)表中的存儲(chǔ)過(guò)程運(yùn)行結(jié)果。

以下有 三種方式 使用游標(biāo)創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,統(tǒng)計(jì)某一部門下的員工信息

方法一:Loop循環(huán)

調(diào)用存儲(chǔ)過(guò)程:

方法二:While 循環(huán)

調(diào)用存儲(chǔ)過(guò)程:

方法三:REPEAT 循環(huán)

調(diào)用存儲(chǔ)過(guò)程:

上述三種實(shí)現(xiàn)方法在測(cè)試過(guò)程中遇到下述問(wèn)題。

調(diào)用存儲(chǔ)過(guò)程查詢臨時(shí)表輸出結(jié)果時(shí),會(huì)發(fā)現(xiàn)多循環(huán)了一次,像這樣:

解決方法:

在遍歷游標(biāo)查詢結(jié)果時(shí),先判斷游標(biāo)的結(jié)束標(biāo)志(done) 是否是為1,如果不是1,則向臨時(shí)表中插入數(shù)據(jù)。

mysql 存儲(chǔ)過(guò)程 怎么跳出游標(biāo) 循環(huán)

游標(biāo)一般與循環(huán)一起使用,可以設(shè)置一個(gè)循環(huán)結(jié)束條件來(lái)跳出循環(huán)并關(guān)閉游標(biāo)。

mysql中游標(biāo)

下面是一個(gè) MySQL 的 游標(biāo)處理的 例子代碼。 你參考參考看看。

mysql DELIMITER //

mysql CREATE PROCEDURE TestCursor()

- BEGIN

-

- DECLARE v_id INT;

- DECLARE v_value VARCHAR(10);

-

- -- 游標(biāo)控制的標(biāo)志

- DECLARE no_more_departments INT;

-

- -- 定義游標(biāo).

- DECLARE c_test_main CURSOR

- FOR

- SELECT id, value FROM test_main;

-

- -- 當(dāng)游標(biāo)沒(méi)有數(shù)據(jù)的時(shí)候

- -- 設(shè)置 no_more_departments = 1

- DECLARE CONTINUE HANDLER

- FOR

- NOT FOUND SET no_more_departments=1;

-

- -- 設(shè)置初始標(biāo)志位,認(rèn)為游標(biāo)是有數(shù)據(jù)的.

- SET no_more_departments=0;

-

- -- 打開(kāi)游標(biāo)

- OPEN c_test_main;

-

- -- 獲取游標(biāo)數(shù)據(jù)

- FETCH c_test_main INTO v_id, v_value;

-

- -- 循環(huán)所有的行

- WHILE no_more_departments = 0 DO

- -- 輸出調(diào)試信息

- SELECT v_id, v_value;

-

- -- 獲取游標(biāo)數(shù)據(jù)

- FETCH c_test_main INTO v_id, v_value;

- END WHILE;

-

- -- 關(guān)閉游標(biāo)

- CLOSE c_test_main;

- END//

Query OK, 0 rows affected (0.00 sec)

誰(shuí)有有關(guān)MYSQL游標(biāo)的知識(shí)

比較基礎(chǔ)的

可以用在存儲(chǔ)過(guò)程的SQL語(yǔ)句主要有以下類型:

1、

無(wú)返回結(jié)果語(yǔ)句,如:INSERT,UPDATE,DROP,

DELETE等

2、

select語(yǔ)句返回單行變量并可傳給本地變量(select

..into)

3、

返回多行結(jié)果集的select語(yǔ)句,并可使用游標(biāo)循環(huán)處理

注意,存儲(chǔ)過(guò)程返回的多行結(jié)果集,可以被客戶端程序(如php)所接收,但要在一個(gè)存儲(chǔ)過(guò)程中接收另一個(gè)存儲(chǔ)過(guò)程的結(jié)果集是不可能的,一般解決辦法是存入臨時(shí)表供其它過(guò)程共用

4、

prepare語(yǔ)句

以下主要講述游標(biāo)及prepare部分

游標(biāo)

定義

DECLARE

cursor_name

CURSOR

FOR

SELECT_statement;

游標(biāo)操作

OPEN

打開(kāi)游標(biāo)

OPEN

cursor_name;

FETCH

獲取游標(biāo)當(dāng)前指針的記錄,并傳給指定變量列表,注意變量數(shù)必須與游標(biāo)返回的字段數(shù)一致,要獲得多行數(shù)據(jù),使用循環(huán)語(yǔ)句去執(zhí)行FETCH

FETCH

cursor_name

INTO

variable

list;

CLOSE關(guān)閉游標(biāo)

CLOSE

cursor_name

;

注意:mysql的游標(biāo)是向前只讀的,也就是說(shuō),你只能順序地從開(kāi)始往后讀取結(jié)果集,不能從后往前,也不能直接跳到中間的記錄.

一個(gè)完整的例子:

--

定義本地變量

DECLARE

o

varchar(128);

--

定義游標(biāo)

DECLARE

ordernumbers

CURSOR

FOR

SELECT

callee_name

FROM

account_tbl

where

acct_timeduration=10800;

DECLARE

CONTINUE

HANDLER

FOR

NOT

FOUND

SET

no_more_departments=1;

SET

no_more_departments=0;

--

打開(kāi)游標(biāo)

OPEN

ordernumbers;

--

循環(huán)所有的行

REPEAT

--

Get

order

number

FETCH

ordernumbers

INTO

o;

update

account

set

allMoney=allMoney+72,lastMonthConsume=lastMonthConsume-72

where

NumTg=@o;

--

循環(huán)結(jié)束

UNTIL

no_more_departments

END

REPEAT;

--

關(guān)閉游標(biāo)

CLOSE

ordernumbers;

mysql中存儲(chǔ)過(guò)程和游標(biāo)調(diào)用問(wèn)題

不知道你 什么版本的 mysql

1、

我使用的 mysql, 好像沒(méi)有 create or replace procedure 這樣的語(yǔ)法。

只能 create procedure

可能是我的 mysql 版本太低了吧...

2、

MySQL 存儲(chǔ)過(guò)程名字后面的“()”是必須的,即使沒(méi)有一個(gè)參數(shù),也需要“()”

這個(gè)不知道是不是也是我mysql 版本太低的問(wèn)題。

create or replace procedure proc_updateDist

修改為

create procedure proc_updateDist ()

3、游標(biāo)部分, 缺少了 DECLARE CONTINUE HANDLER

以及 判斷什么時(shí)候退出循環(huán)的語(yǔ)句。


文章名稱:mysql游標(biāo)怎么跳出來(lái) MySQL定義游標(biāo)
網(wǎng)站地址:http://www.dlmjj.cn/article/hiohhg.html