存儲過程中游標
❶ 存儲過程的游標什麼作用
①從表中檢索出結果集,從中每次指向一條記錄進行交互的機制。
②關系資料庫中的操作是在完整的行集合上執行的。
由SELECT 語句返回的行集合包括滿足該語句的WHERE 子句所列條件的所有行。由該語句返回完整的行集合叫做結果集。
應用程序,尤其是互動和在線應用程序,把完整的結果集作為一個單元處理並不總是有效的。
這些應用程序需要一種機制來一次處理一行或連續的幾行。而游標是對提供這一機制的結果集的擴展。
❷ Mysql存儲過程中游標的用法實例
本文實例講述了Mysql存儲過程中游標的用法。分享給大家供大家參考。具體如下:
1.
批量插入商戶路由關聯數據:
DELIMITER
$$
USE
`mmm_mac`$$
DROP
PROCEDURE
IF
EXISTS
`批量插入商戶路由關聯數據`$$
CREATE
DEFINER=`root`@`%`
PROCEDURE
`批量插入商戶路由關聯數據`()
BEGIN
DECLARE
v_partner_no
VARCHAR(32);
DECLARE
v_partner_id
INT(11);
DECLARE
v_sc_pid
INT(11);
DECLARE
v_mac_no
VARCHAR(32);
DECLARE
v_mac_addr
VARCHAR(32);
DECLARE
n_mac_no
BIGINT;
DECLARE
n_mac_addr
BIGINT;
DECLARE
n_mac_addr_str
VARCHAR(32);
DECLARE
done
INT;
#取得商戶數據
DECLARE
cur_partnerlist
CURSOR
FOR
SELECT
comp_id,
partner_no,
sc_pid
FROM
mmm_partner.anl_partner;
SET
n_mac_no
=
100000000;
SET
n_mac_addr
=
1000000000;
OPEN
cur_partnerlist;
REPEAT
FETCH
cur_partnerlist
INTO
v_partner_id,v_partner_no,v_sc_pid;
SET
v_mac_no
=
CONCAT('MAC',v_sc_pid,n_mac_no);
SET
n_mac_addr_str
=
CONCAT(SUBSTR(n_mac_addr,1,2),':',SUBSTR(n_mac_addr,3,2),':',SUBSTR(n_mac_addr,5,2),':',SUBSTR(n_mac_addr,7,2),':',SUBSTR(n_mac_addr,9,2));
SET
v_mac_addr
=
CONCAT('CC:',n_mac_addr_str);
SET
n_mac_no
=
n_mac_no
+
1;
SET
n_mac_addr
=
n_mac_addr
+
1;
#向t_machine_sc_config表中插入商戶關聯路由的數據
#insert
into
t_machine_sc_config(mac_no,
partner_no,
partner_id,
sc_pid,
mac_addr,
comp_id,
is_lock)
values('MAC2016000000001','44060430603381',1,4403,'C8:87:18:AB:79:66',1,1);
INSERT
INTO
t_machine_sc_config(mac_no,
partner_no,
partner_id,
sc_pid,
mac_addr,
comp_id,
is_lock)
VALUES(v_mac_no,v_partner_no,v_partner_id,v_sc_pid,v_mac_addr,1,1);
UNTIL
0
END
REPEAT;
CLOSE
cur_partnerlist;
END$$
DELIMITER
;
2.
更新商戶表:
DELIMITER
$$
USE
`mmm_partner`$$
DROP
PROCEDURE
IF
EXISTS
`更新商戶表`$$
CREATE
DEFINER=`root`@`%`
PROCEDURE
`更新商戶表`()
BEGIN
DECLARE
v_partner_no
VARCHAR(32);
DECLARE
vpartner_no
VARCHAR(32);
DECLARE
v_partner_id
VARCHAR(32);
DECLARE
n
BIGINT;
DECLARE
partnerid_list
CURSOR
FOR
SELECT
comp_id
FROM
100msh_partner.anl_partner
WHERE
TRIM(partner_no)
=
'';
SET
vpartner_no
=
'2015415parno';
SET
n
=
10000000;
OPEN
partnerid_list;
REPEAT
FETCH
partnerid_list
INTO
v_partner_id;
SET
v_partner_no
=
CONCAT(vpartner_no,n);
SET
n
=
n
+
1;
UPDATE
mmm_partner.anl_partner
SET
partner_no
=
v_partner_no
WHERE
comp_id
=
v_partner_id;
UNTIL
0
END
REPEAT;
CLOSE
partnerid_list;
END$$
DELIMITER
;
希望本文所述對大家的mysql資料庫程序設計有所幫助。
❸ 存儲過程為什麼要用游標,什麼情況下使用游標
游標一般用於把通過腳本得到的結果集的內容在用於其它的SQL語句中。但是游標執行會影響腳本執行速度,所以使用時請慎重。 在存儲過程或觸發器中使用 SQL 游標的典型過程為: 聲明SQL 變數包含游標返回的數據。為每個結果集列聲明一個變數。聲明足夠大的變數來保存列返回的值,並聲明變數的類型為可從列數據類型隱式轉換得到的數據類型。
使用 DECLARE CURSOR 語句將 SQL 游標與 SELECT 語句相關聯。另外,DECLARE CURSOR 語句還定義游標的特性,例如游標名稱以及游標是只讀還是只進。
使用 OPEN 語句執行 SELECT 語句並填充游標。
使用 FETCH INTO 語句提取單個行,並將每列中的數據移至指定的變數中。然後,其他 SQL 語句可以引用那些變數來訪問提取的數據值。SQL 游標不支持提取行塊。
使用 CLOSE 語句結束游標的使用。關閉游標可以釋放某些資源,例如游標結果集及其對當前行的鎖定,但如果重新發出一個 OPEN 語句,則該游標結構仍可用於處理。由於游標仍然存在,此時還不能重新使用該游標的名稱。DEALLOCATE 語句則完全釋放分配給游標的資源,包括游標名稱。釋放游標後,必須使用 DECLARE 語句來重新生成游標。
請採納。
❹ 如何在存儲過程中使用游標
ALTER proc [dbo].[存儲過程名]
as
begin
declare 游標名字 cursor for select 列名 from 表名 where 條件--先申明游標指向查詢出的結果,一列,或者多列都可以,條件自定
declare 變數名 varchar(400)--存儲取到的值
open 游標名 --開啟游標
while @@FETCH_STATUS=0--取值
begin
fetch next FROM 游標名 into 變數名--這樣就將游標指向下一行,得到的第一行值就傳給變數了
-------------------------------------------
--需要執行的操作,例如修改某表中的欄位
update 表名
set 列名=值
where (修改表中的列)=變數名
-------------------------------------------
end
close 游標名--關閉游標
deallocate 游標名--釋放游標
end
❺ 6、什麼是存儲過程什麼是游標,何時使用、何時不用游標
存儲過程是一組命名了的SQL語句集合,是為了完成特定功能匯集而成的。該集合編譯後存放在資料庫中,可根據實際情況重新編譯,可直接運行,也可遠程運行且存儲過程直接在伺服器端運行。
游標實際上是一種能從包括多條數據記錄的結果集(結果集是select查詢之後返回的所有行數據的集合)中每次提取一條記錄的機制充當指針的作用,遍歷結果中的所有行,但他一次只指向一行。
游標在循環處理欄位的時候使用
建議:盡量避免使用游標,因為游標的效率較差,如果游標操作的數據超過1萬行,那麼就應該考慮改寫;使用基於游標的方法或臨時表方法之前,應先尋找基於集的解決方案來解決問題,基於集的方法通常更有效;與臨時表一樣,游標並不是不可使用。
❻ 資料庫中游標的作用是什麼
游標是從表中檢索出的結果集,可以被看作指向結果集中某一行的指針(Pointer)與結果集進行交互的機制。游標的每個時間點只能指向一行,但是可以根據需要指向結果集中其他的行。
游標從概念上講是基於資料庫的表返回結果集,由於它指示結果集中的當前位置,就像計算機屏幕上的游標指示當前位置一樣,「游標」由此得名。游標概述游標是通過游標庫來實現的,而游標庫常常是作為資料庫系統或數據訪問API的一部分而得以實現的軟體,用來管理從數據源返回的數據的結果集。游標跟蹤結果集中的位置,並允許對結果集逐行執行多個操作,在這個過程中可能返回至原始表,也可能不返回至原始表。
在初始的時候,游標被放置在結果集中第一行的前面。為了使游標指向第一行,要執行FETCH動作。當游標指向結果集中某行的時候,可以對這行數據進行加工處理,要想得到下一行數據,要繼續執行FETCH操作。FETCH操作可以重復執行,直到完成結果集中的所有行。
1.游標的作用對查詢資料庫所返回的記錄進行遍歷。
2.游標的屬性((1)游標是只讀的,也就是不能更新它。
(2)游標是不能滾動的,也就是只能在一個方向上進行遍歷,不能在記錄之間隨意進退,也不能跳過某些記錄。
(3)避免在已經打開游標的表上更新數據。游標使用游標對關系資料庫來說極其重要,它是操作資料庫伺服器上記錄的一種重要機制。在存儲過程中使用游標,經過聲明游標、打開游標、操作游標和關閉游標等幾個步驟,將游標指向的數據取到本地,在結束時關閉游標。
1.游標的使用步驟(1)聲明游標語法格式:DECLARE+游標名+CURSORFOR+SELECT語句DECLARE為聲明游標的關鍵字,後面跟游標的名稱,CURSORFOR表示游標要操作的數據結果集,後面跟一條資料庫的SELECT檢索語句。例如,下面語句聲明了一個叫mycoursor的游標。_name
❼ 存儲過程中輸出參數為游標的時候怎麼處理
你的意思是不是要獲取到「當前用戶:user_id」這個的內容,如果是,兩個方式可以解決:
1.通過存儲過程的出參,將「當前用戶:user_id」連接串返回;
比如:
假設你的過程叫,prc_test,在參數列表中增加出參。
create or replace procere prc_test(入參 in 類型, 出參 out 類型) is
begin
-- 邏輯實現
end;
出參就是你要把內容放進去,用來傳值的變數。
2.在過程中保存一張臨時表,然後在java中查出這個臨時表中保存的數據。
定義臨時表table_temp
在過程中
insert into table_temp(msg) values ('當前用戶:' || user_id);