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

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

 更新時間:2023年02月16日 08:27:24   作者:陽862  
游標(cursor)是用來存儲查詢結(jié)果集的數(shù)據(jù)類型,在存儲過程和函數(shù)中可以使用游標對結(jié)果集進行循環(huán)的處理,這篇文章主要介紹了SQL中的游標、異常處理、存儲函數(shù)及總結(jié),需要的朋友可以參考下

一.游標

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

格式

操作

 演示

use test_procedure ;
-- 需求:輸入一個部門名,查詢該部門員工的編號、名字、薪資,將查詢的結(jié)果集添加游標
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);
	-- 聲明游標
	declare my_cursor cursor for
	select empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;
	-- 打開游標
	open my_cursor;
	-- 通過游標獲得值
	fetch my_cursor into var_empno,var_ename,var_sal;
	select var_empno,var_ename,var_sal;
	-- 關(guān)閉游標
	close my_cursor;
end $$
delimiter ;
 
call proc21('銷售部');

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

但是

 我們發(fā)現(xiàn)符合要求的有多個值,這是因為游標是一條條往下執(zhí)行的所以我們可以用一個循環(huán)

use test_procedure ;
-- 需求:輸入一個部門名,查詢該部門員工的編號、名字、薪資,將查詢的結(jié)果集添加游標
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);
	-- 聲明游標
	declare my_cursor cursor for
	select empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;
	-- 打開游標
	open my_cursor;
	-- 通過游標獲得值
	label:loop
	fetch my_cursor into var_empno,var_ename,var_sal;
	select var_empno,var_ename,var_sal;
	end loop label;
	-- 關(guān)閉游標
	close my_cursor;
end $$
delimiter ;
 
call proc21('銷售部');

 結(jié)果會報錯

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

二.異常處理—handler句柄

格式

 注意

在語法中,變量聲明、游標聲明、handler聲明是必須按照先后順序書寫的,否則創(chuàng)建存儲過程出錯。

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

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

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

條件碼:1329

條件名:
        SQLWARNING

        NOT FOUND

        SQLEXCEPTION

 演示

-- 用條件名
use test_procedure ;
-- 需求:輸入一個部門名,查詢該部門員工的編號、名字、薪資,將查詢的結(jié)果集添加游標
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);
 
	-- 定義標記值
	declare flag int default 1;
	-- 聲明游標
	declare my_cursor cursor for
	select empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;
	-- 定義句柄,當數(shù)據(jù)未發(fā)現(xiàn)時將標記位設(shè)置為0
	declare continue handler for  not found set flag=0;
 
	-- 打開游標
	open my_cursor;
	-- 通過游標獲得值
	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)閉游標
	close my_cursor;
end $$
delimiter ;
 
call proc22('銷售部');
 
 
 
-- 用條件碼
use test_procedure ;
-- 需求:輸入一個部門名,查詢該部門員工的編號、名字、薪資,將查詢的結(jié)果集添加游標
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);
 
	-- 定義標記值
	declare flag int default 1;
	-- 聲明游標
	declare my_cursor cursor for
	select empno ,ename ,sal  from emp e,dept d where d.dname =in_name ;
	-- 定義句柄,當數(shù)據(jù)未發(fā)現(xiàn)時將標記位設(shè)置為0
	declare continue handler for  1329 set flag=0;
 
	-- 打開游標
	open my_cursor;
	-- 通過游標獲得值
	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)閉游標
	close my_cursor;
end $$
delimiter ;
 
call proc23('銷售部');

兩個的運行結(jié)果是一樣的

 三.存儲函數(shù)

格式

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

 參數(shù)說明

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

演示

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

運行結(jié)果可以會報錯,像這樣

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

所以我們設(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 int
begin
	declare cnt int default 0;
	select count(*) into cnt from emp;
	return cnt;
end $$
delimiter ;
 
-- 調(diào)用存儲函數(shù)
select myfunc1_emp();

 這樣就可以了

四.存儲過程總結(jié)

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

相關(guān)文章

  • SQL Server 2008 正式版安裝指南 包含序列號

    SQL Server 2008 正式版安裝指南 包含序列號

    和Visual Studio 2008一樣,從官網(wǎng)下載SQL Server 2008的180天試用版其實與正式版內(nèi)容是基本相同的,唯一的區(qū)別就在于安裝配置文件中所包含的key。各種版本的SQL Server是完全一樣的。
    2009-02-02
  • SQL?Server數(shù)據(jù)庫入門教程之多表查詢

    SQL?Server數(shù)據(jù)庫入門教程之多表查詢

    這篇文章主要給大家介紹了關(guān)于SQL?Server數(shù)據(jù)庫入門教程之多表查詢的相關(guān)資料,多表查詢是SQL數(shù)據(jù)庫里的高級查詢語句,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • SQL Server2014 哈希索引原理詳解

    SQL Server2014 哈希索引原理詳解

    SQL Server 2014推出的的新索引類型叫做 hash index。介紹hash index之前一定要介紹哈希函數(shù)這樣會讓大家更明白哈希索引的原理,有需要的朋友可以參考下
    2015-09-09
  • 使用Navicat從SQL?Server導入表數(shù)據(jù)到MySQL的操作流程

    使用Navicat從SQL?Server導入表數(shù)據(jù)到MySQL的操作流程

    這篇文章主要介紹了使用Navicat從SQL?Server導入表數(shù)據(jù)到MySQL的操作流程,文中通過圖文結(jié)合的方式講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-12-12
  • SQL行轉(zhuǎn)列和列轉(zhuǎn)行代碼詳解

    SQL行轉(zhuǎn)列和列轉(zhuǎn)行代碼詳解

    這篇文章主要介紹了SQL行轉(zhuǎn)列和列轉(zhuǎn)行代碼詳解,涉及動態(tài)方案和靜態(tài)方案兩種處理方式,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • SQL Server2022安裝教程的實現(xiàn)步驟(圖文教程)

    SQL Server2022安裝教程的實現(xiàn)步驟(圖文教程)

    在日常的工作中,sql server作為一款常用的數(shù)據(jù)庫管理系統(tǒng),安裝與配置就顯得非常重要,本文主要介紹了SQL Server2022安裝教程的實現(xiàn)步驟,感興趣的可以了解一下
    2023-09-09
  • SQL Server 監(jiān)控磁盤IO錯誤,msdb.dbo.suspect_pages

    SQL Server 監(jiān)控磁盤IO錯誤,msdb.dbo.suspect_pages

    suspect_pages 表位于 msdb 數(shù)據(jù)庫中,是在 SQL Server 2005 中引入的。用于維護有關(guān)可疑頁的信息的 suspect_pages
    2014-10-10
  • 關(guān)于數(shù)據(jù)庫優(yōu)化問題收集匯總

    關(guān)于數(shù)據(jù)庫優(yōu)化問題收集匯總

    筆者在工作實踐中發(fā)現(xiàn),不良的SQL往往來自于不恰當?shù)乃饕O(shè)計、不充份的連接條件和不可優(yōu)化的where子句。以下就對數(shù)據(jù)庫優(yōu)化問題進行了介紹,需要的朋友可以參考下
    2013-07-07
  • 批量執(zhí)行sql語句的方法

    批量執(zhí)行sql語句的方法

    批量執(zhí)行數(shù)據(jù)庫插入,可以了解下sql的begin使用方法
    2008-12-12
  • SQL Server2012在開發(fā)中的一些新特性

    SQL Server2012在開發(fā)中的一些新特性

    SQL Server 2012已經(jīng)發(fā)布一段時間了,最近在新的機器上安裝了最新的SQL Server 2012 SP1,體檢下感覺良好。官方給出了一大堆SQL2012相對于SQL2008R2的新特性,但是大多數(shù)對于普通開發(fā)人員來說都是浮云,根本用不到,下面就說說一些對于開發(fā)人員來說比較有用的新特性。
    2013-04-04

最新評論

桃江县| 尼玛县| 湛江市| 新津县| 迁西县| 新巴尔虎右旗| 盐池县| 舒兰市| 涪陵区| 中卫市| 莲花县| 苏州市| 奉新县| 龙州县| 巫山县| 汝阳县| 隆回县| 新龙县| 蚌埠市| 大宁县| 新竹市| 吉木萨尔县| 囊谦县| 保亭| 银川市| 咸丰县| 闽清县| 本溪市| 元江| 改则县| 永德县| 阿拉善盟| 渭南市| 嵊泗县| 石林| 芜湖市| 清新县| 礼泉县| 馆陶县| 陆河县| 辽阳县|