成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SQL中的游標(biāo)、異常處理、存儲(chǔ)函數(shù)及總結(jié)(最新推薦)

瀏覽:170日期:2023-03-06 14:25:45
目錄
  • 一.游標(biāo)
    • 格式
    • 操作
    • 演示
  • 二.異常處理—handler句柄
    • 格式
    • 演示
  • 三.存儲(chǔ)函數(shù)
    • 格式
    • 參數(shù)說(shuō)明
    • 演示
  • 四.存儲(chǔ)過(guò)程總結(jié)

    一.游標(biāo)

    游標(biāo)(cursor)是用來(lái)存儲(chǔ)查詢結(jié)果集的數(shù)據(jù)類型,在存儲(chǔ)過(guò)程和函數(shù)中可以使用游標(biāo)對(duì)結(jié)果集進(jìn)行循環(huán)的處理。游標(biāo)的使用包括游標(biāo)的聲明、OPEN、FETCH和 CLOSE.

    格式

    操作

    演示

    use test_procedure ;-- 需求:輸入一個(gè)部門(mén)名,查詢?cè)摬块T(mén)員工的編號(hào)、名字、薪資,將查詢的結(jié)果集添加游標(biāo)delimiter $$create procedure proc21(in in_name varchar(50))begin	-- 定義局部變量	declare var_empno int;	declare var_ename varchar(50);	declare var_sal decimal(7,2);	-- 聲明游標(biāo)	declare my_cursor cursor for	select empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;	-- 打開(kāi)游標(biāo)	open my_cursor;	-- 通過(guò)游標(biāo)獲得值	fetch my_cursor into var_empno,var_ename,var_sal;	select var_empno,var_ename,var_sal;	-- 關(guān)閉游標(biāo)	close my_cursor;end $$delimiter ; call proc21("銷(xiāo)售部");

    運(yùn)行輸出的結(jié)果是

    但是

    我們發(fā)現(xiàn)符合要求的有多個(gè)值,這是因?yàn)橛螛?biāo)是一條條往下執(zhí)行的所以我們可以用一個(gè)循環(huán)

    use test_procedure ;-- 需求:輸入一個(gè)部門(mén)名,查詢?cè)摬块T(mén)員工的編號(hào)、名字、薪資,將查詢的結(jié)果集添加游標(biāo)delimiter $$create procedure proc21(in in_name varchar(50))begin	-- 定義局部變量	declare var_empno int;	declare var_ename varchar(50);	declare var_sal decimal(7,2);	-- 聲明游標(biāo)	declare my_cursor cursor for	select empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;	-- 打開(kāi)游標(biāo)	open my_cursor;	-- 通過(guò)游標(biāo)獲得值	label:loop	fetch my_cursor into var_empno,var_ename,var_sal;	select var_empno,var_ename,var_sal;	end loop label;	-- 關(guān)閉游標(biāo)	close my_cursor;end $$delimiter ; call proc21("銷(xiāo)售部");

    結(jié)果會(huì)報(bào)錯(cuò)

    No data - zero rows fetched, selected, or processed 這句話意思是沒(méi)有數(shù)據(jù) 零行 讀取 選擇或處理,就是說(shuō)循環(huán)到最后沒(méi)值了,所以我們需要找到一個(gè)條件并及時(shí)退出循環(huán),這就需要異常處理—handler句柄。

    二.異常處理—handler句柄

    格式

    注意

    在語(yǔ)法中,變量聲明、游標(biāo)聲明、handler聲明是必須按照先后順序書(shū)寫(xiě)的,否則創(chuàng)建存儲(chǔ)過(guò)程出錯(cuò)。

    --定義句柄:定義異常的處理方式

    1:異常處理完之后程序該怎么執(zhí)行
    continue :繼續(xù)執(zhí)行剩余代碼

    exit :直接終止程序
    undo:不支持
    2:觸發(fā)條件

    條件碼:1329

    條件名:
    SQLWARNING

    NOT FOUND

    SQLEXCEPTION

    演示

    -- 用條件名use test_procedure ;-- 需求:輸入一個(gè)部門(mén)名,查詢?cè)摬块T(mén)員工的編號(hào)、名字、薪資,將查詢的結(jié)果集添加游標(biāo)delimiter $$create procedure proc22(in in_name varchar(50))begin	-- 定義局部變量	declare var_empno int;	declare var_ename varchar(50);	declare var_sal decimal(7,2); 	-- 定義標(biāo)記值	declare flag int default 1;	-- 聲明游標(biāo)	declare my_cursor cursor for	select empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;	-- 定義句柄,當(dāng)數(shù)據(jù)未發(fā)現(xiàn)時(shí)將標(biāo)記位設(shè)置為0	declare continue handler for  not found set flag=0; 	-- 打開(kāi)游標(biāo)	open my_cursor;	-- 通過(guò)游標(biāo)獲得值	label:loop	fetch my_cursor into var_empno,var_ename,var_sal;	if flag=1 then		select var_empno,var_ename,var_sal;	else		leave label;	end if;	end loop label;	-- 關(guān)閉游標(biāo)	close my_cursor;end $$delimiter ; call proc22("銷(xiāo)售部");   -- 用條件碼use test_procedure ;-- 需求:輸入一個(gè)部門(mén)名,查詢?cè)摬块T(mén)員工的編號(hào)、名字、薪資,將查詢的結(jié)果集添加游標(biāo)delimiter $$create procedure proc23(in in_name varchar(50))begin	-- 定義局部變量	declare var_empno int;	declare var_ename varchar(50);	declare var_sal decimal(7,2); 	-- 定義標(biāo)記值	declare flag int default 1;	-- 聲明游標(biāo)	declare my_cursor cursor for	select empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;	-- 定義句柄,當(dāng)數(shù)據(jù)未發(fā)現(xiàn)時(shí)將標(biāo)記位設(shè)置為0	declare continue handler for  1329 set flag=0; 	-- 打開(kāi)游標(biāo)	open my_cursor;	-- 通過(guò)游標(biāo)獲得值	label:loop	fetch my_cursor into var_empno,var_ename,var_sal;	if flag=1 then		select var_empno,var_ename,var_sal;	else		leave label;	end if;	end loop label;	-- 關(guān)閉游標(biāo)	close my_cursor;end $$delimiter ; call proc23("銷(xiāo)售部");

    兩個(gè)的運(yùn)行結(jié)果是一樣的

    三.存儲(chǔ)函數(shù)

    格式

    在MySQL中,創(chuàng)建存儲(chǔ)函數(shù)使用create function關(guān)鍵字,其基本形式如下:

    參數(shù)說(shuō)明

    (1) func_name :存儲(chǔ)函數(shù)的名稱。
    (2) param_name type:可選項(xiàng),指定存儲(chǔ)函數(shù)的參數(shù)。type參數(shù)用于指定存儲(chǔ)函數(shù)的參數(shù)類型,該類型可以是MySQL數(shù)據(jù)庫(kù)中所有支持的類型。
    (3)returns type:指定返回值的類型。
    (4)characteristic:可選項(xiàng),指定存儲(chǔ)函數(shù)的特性。
    (5)routine_body: SQL代碼內(nèi)容。

    演示

    drop function if exists myfunc1_emp;delimiter $$create function myfunc1_emp() returns intbegin	declare cnt int default 0;	select count(*) into cnt from emp;	return cnt;end $$delimiter ;

    運(yùn)行結(jié)果可以會(huì)報(bào)錯(cuò),像這樣

    意思是說(shuō)“此函數(shù)在其聲明中沒(méi)有確定性、無(wú) SQL 或讀取 SQL 數(shù)據(jù),并且啟用了二進(jìn)制日志記錄(您*可能*希望使用不太安全的 log_bin_trust_function_creators 變量)”

    所以我們?cè)O(shè)置允許創(chuàng)建函數(shù)權(quán)限信任即可

    -- 允許創(chuàng)建函數(shù)權(quán)限信任
    set global log_bin_trust_function_creators=true ;

    -- 允許創(chuàng)建函數(shù)權(quán)限信任set global log_bin_trust_function_creators=true ; drop function if exists myfunc1_emp;delimiter $$create function myfunc1_emp() returns intbegin	declare cnt int default 0;	select count(*) into cnt from emp;	return cnt;end $$delimiter ; -- 調(diào)用存儲(chǔ)函數(shù)select myfunc1_emp();

    這樣就可以了

    四.存儲(chǔ)過(guò)程總結(jié)

    到此這篇關(guān)于SQL中的游標(biāo)、異常處理、存儲(chǔ)函數(shù)及總結(jié)的文章就介紹到這了,更多相關(guān)SQL中的游標(biāo)、異常處理、存儲(chǔ)函數(shù)內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

    標(biāo)簽: MsSQL
    主站蜘蛛池模板: 亚洲精品一区二区三区在线看 | 亚洲手机国产精品 | 欧美一级看片 | 韩国美女一级片 | 最新中文字幕一区二区乱码 | 国产精品亚洲精品不卡 | 国产精品一区在线免费观看 | 国产成人丝袜视频在线视频 | 国产日韩高清一区二区三区 | 偷拍自拍第一页 | 精品久久影院 | 99久久精品国产一区二区小说 | 俄罗斯aa毛片一级 | 亚洲精品天堂一区 | 亚洲美女在线播放 | 国产主播福利精品一区二区 | 国产精品久久久久久久久久98 | 久久福利资源站免费观看i 久久高清精品 | 国产日产欧产精品精品推荐小说 | a理论片| 三级中文字幕永久在线视频 | 九九九九九九 | 色偷偷888欧美精品久久久 | 成人a站| 手机国产精品一区二区 | 日韩在线第一区 | 免费人成网站免费看视频 | 国产成人久久综合二区 | 在线私拍国产福利精品 | 国产成人久久一区二区三区 | 美女视频黄的免费看网站 | 全免费a级毛片免费看 | 国产特黄一级一片免费 | 欧美成人看片黄a免费看 | 成人毛片免费观看视频在线 | 午夜视频久久 | 在线观看免费国产成人软件 | 久久精品最新免费国产成人 | 伊人www | 国产一区二区三区在线看 | 91成人国产 |