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

mysql數(shù)據(jù)庫存儲過程之游標(光標cursor)詳解

 更新時間:2023年07月06日 09:40:02   作者:晚安果汁  
這篇文章主要介紹了mysql數(shù)據(jù)庫存儲過程之游標(光標cursor)詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mysql存儲過程之游標(光標cursor)

游標是用來存儲查詢結果集的數(shù)據(jù)類型,在存儲過程和函數(shù)中可以使用游標對結果集進行循環(huán)的處理。

游標的使用包括游標的聲明、open、fetch和close。

一、語法

#聲明游標
declare 游標名稱 cursor for 查詢語句;
#開啟游標
open 游標名稱;
#獲取游標記錄
fetch 游標名稱 into 變量[,變量];
#關閉游標
close 游標名稱;

二、案例

根據(jù)傳入的參數(shù)uage,來查詢用戶表tb_user中,所有的用戶年齡小于等于uage的用戶姓名name和專業(yè)profession,并將用戶的姓名和專業(yè)插入到所創(chuàng)建的一張新表id,name,profession中。

邏輯

#A.聲明游標,存儲查詢結果集

#B.創(chuàng)建表結構

#C.開啟游標

#D.獲取游標記錄

#E.插入數(shù)據(jù)到新表中

#F.關閉游標

#創(chuàng)建一個存儲過程
create procedure p11(in uage int)
begin
? declare uname varchar(100);#聲明變量
? declary upro varchar(100);#聲明變量
#聲明游標記錄符合條件的結果集
? declare u_cursor cursor for select name,profession from tb_user where age <= uage;
? drop table if exists tb_user_pro; ?#tb_user_pro表如果存在,就刪除。
? create table if exists tb_user_pro( ?#if exists代表表存在就刪除了再創(chuàng)建表
? id int primary key auto_increment,
? name varchar(100),
? profession varchar(100)
? );
? open u_cursor;#開啟游標
#while循環(huán)獲取游標當中的數(shù)據(jù)
? while true do
? fetch u_cursor into uname,upro;#獲取游標中的記錄
? insert into tb_user_pro values(null,uname,upro);#將獲取到的數(shù)據(jù)插入表結構中
? end while;
? close u_cursor;#關閉游標
end;
#查詢年齡小于30
call p11(30);

三、條件處理程序

條件處理程序handler可以用來定義在流程控制結構執(zhí)行過程中遇到問題時相應的處理步驟。

1、語法

declare handler_action handler for condition_value [,condition_value]... statement;

handler_action

  • continue:繼續(xù)執(zhí)行當前程序
  • exit:終止執(zhí)行當前程序 

condition_value

  • SQLSTATE sqlstate_value:狀態(tài)碼,如02000
  • SQLwarning:所有以01開頭的SQLstate代碼的簡寫
  • not found:所有以02開頭的SQLSTATE代碼的簡寫
  • SQLexception:所有沒有被SQLwarning或not found捕獲的SQLstate代碼的簡寫

2、解決報錯

#創(chuàng)建一個存儲過程
create procedure p11(in uage int)
begin
? declare uname varchar(100);#聲明變量
? declary upro varchar(100);#聲明變量
#聲明游標記錄符合條件的結果集
? declare u_cursor cursor for select name,profession from tb_user where age <= uage;
#聲明一個條件處理程序,當滿足SQL狀態(tài)碼為02000的時候,觸發(fā)退出操作,退出的時候將游標關閉
? declare exit handler for SQLSTATE '02000' close u_cursorl;
#聲明一個條件處理程序,當滿足SQL狀態(tài)碼為02000的時候,觸發(fā)退出操作,退出的時候將游標關閉
? declare exit handler for not found close u_cursorl;
drop table if exists tb_user_pro; ?#tb_user_pro表如果存在,就刪除。
? create table if exists tb_user_pro( ?#if exists代表表存在就刪除了再創(chuàng)建表
? id int primary key auto_increment,
? name varchar(100),
? profession varchar(100)
? );
? open u_cursor;#開啟游標
#while循環(huán)獲取游標當中的數(shù)據(jù)
? while true do
? fetch u_cursor into uname,upro;#獲取游標中的記錄
? insert into tb_user_pro values(null,uname,upro);#將獲取到的數(shù)據(jù)插入表結構中
? end while;
? close u_cursor;#關閉游標
end;
#查詢年齡小于30
call p11(30);

mysql存儲過程-游標 CURSOR FOR

1、游標

游標是一個存儲在MySQL服務器上的數(shù)據(jù)庫查詢,它不是一條select語句,而是被該語句所檢索出來的結果集。

2、定義游標

這個過程并沒有檢索到數(shù)據(jù),只是定義要使用的select語句

DECLARE t_cursor CURSOR FOR SELECT t.id FROM t_dept t;

3、如果沒有數(shù)據(jù)返回或者select出現(xiàn)異常,程序繼續(xù),并將變量done設為true

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=true;

4、打開游標

open t_cursor;

5、使用游標

使用fetch來取出數(shù)據(jù)

fetch t_cursor in variable;

6、關閉游標

close t_cursor;

過程:定義游標(使用游標前必須先定義游標)—》打開游標—》關閉游標

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MySQL報錯sql_mode=only_full_group_by的問題解決

    MySQL報錯sql_mode=only_full_group_by的問題解決

    本文主要介紹了MySQL報錯sql_mode=only_full_group_by的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-02-02
  • mysql for update是鎖表還是鎖行實例詳解

    mysql for update是鎖表還是鎖行實例詳解

    在并發(fā)一致性控制場景中,我們常常用for update悲觀鎖來進行一致性的保證,但是如果不了解它的機制,就進行使用,很容易出現(xiàn)事故,比如for update進行了鎖表導致其他請求只能等待,從而拖垮系統(tǒng),這篇文章主要介紹了mysql for update是鎖表還是鎖行操作,需要的朋友可以參考下
    2024-03-03
  • 淺談mysql explain中key_len的計算方法

    淺談mysql explain中key_len的計算方法

    下面小編就為大家?guī)硪黄獪\談mysql explain中key_len的計算方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • MySQL 配置文件 my.cnf / my.ini 區(qū)別解析

    MySQL 配置文件 my.cnf / my.ini 區(qū)別解析

    充分理解 MySQL 配置文件中各個變量的意義對我們有針對性的優(yōu)化 MySQL 數(shù)據(jù)庫性能有非常大的意義,這篇文章主要介紹了MySQL 配置文件 my.cnf / my.ini 區(qū)別,需要的朋友可以參考下
    2022-11-11
  • 淺談MySQL安裝starting the server失敗的解決辦法

    淺談MySQL安裝starting the server失敗的解決辦法

    如果電腦是不是第一次安裝MySQL,一般會出現(xiàn)報錯情況,starting the server失敗,通常是因為上次安裝的該軟件未清除干凈,本文就詳細的介紹一下解決方法,感興趣的可以了解一下
    2021-09-09
  • MySQL連接中斷問題分析與解決方案

    MySQL連接中斷問題分析與解決方案

    在開發(fā)和維護Web應用時,數(shù)據(jù)庫連接問題是一個常見的挑戰(zhàn),本文基于一個真實的錯誤案例(pymysql.err.OperationalError:?(2013,?'Lost?connection?to?MySQL?server?during?query')),分析其根本原因,并提供多種解決方案,幫助開發(fā)者優(yōu)化MySQL連接穩(wěn)定性
    2025-05-05
  • Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解

    Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解

    今天小編就為大家分享一篇關于Mysql查看最大連接數(shù)和修改最大連接數(shù)的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL 中 ROW_NUMBER() 函數(shù)最佳實踐

    MySQL 中 ROW_NUMBER() 函數(shù)最佳實踐

    MySQL中ROW_NUMBER()函數(shù),作為窗口函數(shù)為每行分配唯一連續(xù)序號,區(qū)別于RANK()和DENSE_RANK(),特別適合分頁、去重、TopN等需要精確順序控制的場景,本文給大家介紹MySQL中ROW_NUMBER()函數(shù),感興趣的朋友一起看看吧
    2025-06-06
  • 關于MySQL的ORDER BY排序詳解

    關于MySQL的ORDER BY排序詳解

    這篇文章主要介紹了關于MySQL的ORDER BY排序詳解,如果沒有使用排序操作,默認情況下查詢返回的數(shù)據(jù)是按照添加數(shù)據(jù)的順序顯示的,需要的朋友可以參考下
    2023-05-05
  • SQL?CREATE?INDEX提高數(shù)據(jù)庫檢索效率的關鍵步驟詳解

    SQL?CREATE?INDEX提高數(shù)據(jù)庫檢索效率的關鍵步驟詳解

    這篇文章主要為大家介紹了SQL?CREATE?INDEX提高數(shù)據(jù)庫檢索效率的關鍵步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12

最新評論

西宁市| 屏南县| 巴楚县| 德令哈市| 凉城县| 鹤岗市| 金阳县| 虎林市| 鹤山市| 乌兰察布市| 平利县| 土默特左旗| 贵定县| 岳普湖县| 寿阳县| 温州市| 乳源| 双城市| 漳平市| 宣汉县| 绵阳市| 青龙| 土默特右旗| 名山县| 绥宁县| 永寿县| 海南省| 肃北| 潮州市| 三穗县| 江西省| 积石山| 蒲江县| 杭锦后旗| 沧州市| 临清市| 武安市| 什邡市| 张北县| 安吉县| 芒康县|