色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Mysql 存儲過程中使用游標循環(huán)讀取臨時表

瀏覽:10日期:2023-10-07 18:44:02
游標

游標(Cursor)是用于查看或者處理結果集中的數(shù)據(jù)的一種方法。游標提供了在結果集中一次一行或者多行前進或向后瀏覽數(shù)據(jù)的能力。

游標的使用方式

定義游標:Declare 游標名稱 CURSOR for table;(table也可以是select出來的結果集)打開游標:Open 游標名稱;從結果集獲取數(shù)據(jù)到變量:fetch 游標名稱 into field1,field2;執(zhí)行語句:執(zhí)行需要處理數(shù)據(jù)的語句關閉游標:Close 游標名稱;

BEGIN # 聲明自定義變量 declare c_stgId int; declare c_stgName varchar(50); # 聲明游標結束變量 declare done INT DEFAULT 0; # 聲明游標 cr 以及游標讀取到結果集最后的處理方式 declare cr cursor for select Name,StgId from StgSummary limit 3; declare continue handler for not found set done = 1; # 打開游標 open cr; # 循環(huán) readLoop:LOOP # 獲取游標中值并賦值給變量 fetch cr into c_stgName,c_stgId; # 判斷游標是否到底,若到底則退出游標 # 需要注意這個判斷 IF done = 1 THEN LEAVE readLoop; END IF; SELECT c_stgName,c_stgId; END LOOP readLoop; -- 關閉游標 close cr;END

聲明變量Declare語句注意點:

Declare語句通常用來聲明本地變量、游標、條件或者handler Declare語句只允許出現(xiàn)在BEGIN...END語句中而且必須出現(xiàn)在第一行 Declare的順序也有要求,通常是先聲明本地變量,再是游標,然后是條件和handler

自定義變量命名注意點:

自定義變量的名稱不要和游標的結果集字段名一樣。若相同會出現(xiàn)游標給變量賦值無效的情況。

臨時表

臨時表只在當前連接可見,當關閉連接時,Mysql會自動刪除表并釋放所有空間。因此在不同的連接中可以創(chuàng)建同名的臨時表,并且操作屬于本連接的臨時表。與普通創(chuàng)建語句的區(qū)別就是使用 TEMPORARY 關鍵字

CREATE TEMPORARY TABLE StgSummary( Name VARCHAR(50) NOT NULL, StgId INT NOT NULL DEFAULT 0);

臨時表使用限制

在同一個query語句中,只能查找一次臨時表。同樣在一個存儲過程中也不能多次查詢臨時表。但是不同的臨時表可以在一個query中使用。 不能用RENAME來重命名一個臨時表,但是可以用ALTER TABLE代替

ALTER TABLE orig_name RENAME new_name; 臨時表使用完以后需要主動Drop掉

DROP TEMPORARY TABLE IF EXISTS StgTempTable;存儲過程中使用游標循環(huán)讀取臨時表數(shù)據(jù)

BEGIN## 創(chuàng)建臨時表CREATE TEMPORARY TABLE if not exists StgSummary( Name VARCHAR(50) NOT NULL, StgId INT NOT NULL DEFAULT 0);TRUNCATE TABLE StgSummary;## 新增臨時表數(shù)據(jù)INSERT INTO StgSummary(Name,StgId)select ’臨時數(shù)據(jù)’,1BEGIN# 自定義變量declare c_stgId int;declare c_stgName varchar(50);declare done INT DEFAULT 0;declare cr cursor for select Name,StgId from StgSummary ORDER BY StgId desc LIMIT 3;declare continue handler for not found set done = 1;-- 打開游標open cr;testLoop:LOOP-- 獲取結果fetch cr into c_stgName,c_stgId;IF done = 1 THENLEAVE testLoop; END IF; SELECT c_stgName,c_stgId;END LOOP testLoop;-- 關閉游標close cr;End;DROP TEMPORARY TABLE IF EXISTS StgSummary;End;

最開始的時候,先創(chuàng)建臨時表,再定義游標。但是存儲過程無論如何都保存不了。直接報錯You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ’DECLARE ...根本原因就是上面提到的注意點(Declare語句只允許出現(xiàn)在BEGIN...END語句中而且必須出現(xiàn)在第一行)。所以最后只能多個加一對BEGIN...END進行隔開。

總結

以前寫SQL Server的存儲過程,沒有仔細注意過這個問題,定義變量一般都在程序中部,MySQL就想當然的隨便寫,最后終于踩坑了。這兩個語法上差別不大,但是真遇到差別還是挺突然的。不過也好久沒有寫SQL語句,有點生疏了啊。還是趕緊把坑給記下來,加深下印象吧。

以上就是Mysql 存儲過程中使用游標循環(huán)讀取臨時表的詳細內容,更多關于MySQL 游標循環(huán)讀取臨時表的資料請關注好吧啦網其它相關文章!

相關文章:
主站蜘蛛池模板: 日韩欧美一区二区久久 | 欧美综合视频在线观看 | 暖暖视频日韩欧美在线观看 | 国产日产高清欧美一区二区三区 | 亚洲手机国产精品 | 女子张开腿让男人桶视频 | 国产一级一级一级国产片 | 色站综合| 免费国产不卡午夜福在线 | 成人做爰视频www视频 | 日本国产精品 | 一区二区不卡视频在线观看 | 亚洲精品片 | 日韩中文字幕在线免费观看 | 国产成人在线小视频 | 91福利精品老师国产自产在线 | 亚洲天堂小视频 | b毛片| 欧美成人精品免费播放 | 免费一级网站 | 97免费视频在线 | 国产精品2019 | 毛片在线播放网址 | 成年人在线免费观看网站 | a级欧美片免费观看 | 免费人成在线观看网站品爱网 | www.黄色com| 三级做人爱c视频18三级 | 日韩毛片在线免费观看 | 免费鲁丝片一级观看 | tom影院亚洲国产 | 国产tv在线 | 日本三级中文字幕 | 爽死你个放荡粗暴小淫货双女视频 | 乱码在线中文字幕加勒比 | 欧美激情视频在线观看一区二区三区 | 日韩欧美在线一区二区三区 | www.亚洲黄色 | 色综合亚洲七七久久桃花影院 | 国产成人刺激视频在线观看 | 精品国产三级在线观看 |