电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:160日期:2023-03-06 14:25:45
目錄
  • 一.游標
    • 格式
    • 操作
    • 演示
  • 二.異常處理—handler句柄
    • 格式
    • 演示
  • 三.存儲函數
    • 格式
    • 參數說明
    • 演示
  • 四.存儲過程總結

    一.游標

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

    格式

    操作

    演示

    use test_procedure ;-- 需求:輸入一個部門名,查詢該部門員工的編號、名字、薪資,將查詢的結果集添加游標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;	-- 關閉游標	close my_cursor;end $$delimiter ; call proc21("銷售部");

    運行輸出的結果是

    但是

    我們發現符合要求的有多個值,這是因為游標是一條條往下執行的所以我們可以用一個循環

    use test_procedure ;-- 需求:輸入一個部門名,查詢該部門員工的編號、名字、薪資,將查詢的結果集添加游標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;	-- 關閉游標	close my_cursor;end $$delimiter ; call proc21("銷售部");

    結果會報錯

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

    二.異常處理—handler句柄

    格式

    注意

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

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

    1:異常處理完之后程序該怎么執行
    continue :繼續執行剩余代碼

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

    條件碼:1329

    條件名:
    SQLWARNING

    NOT FOUND

    SQLEXCEPTION

    演示

    -- 用條件名use test_procedure ;-- 需求:輸入一個部門名,查詢該部門員工的編號、名字、薪資,將查詢的結果集添加游標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 ;	-- 定義句柄,當數據未發現時將標記位設置為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;	-- 關閉游標	close my_cursor;end $$delimiter ; call proc22("銷售部");   -- 用條件碼use test_procedure ;-- 需求:輸入一個部門名,查詢該部門員工的編號、名字、薪資,將查詢的結果集添加游標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 ;	-- 定義句柄,當數據未發現時將標記位設置為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;	-- 關閉游標	close my_cursor;end $$delimiter ; call proc23("銷售部");

    兩個的運行結果是一樣的

    三.存儲函數

    格式

    在MySQL中,創建存儲函數使用create function關鍵字,其基本形式如下:

    參數說明

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

    演示

    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 ;

    運行結果可以會報錯,像這樣

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

    所以我們設置允許創建函數權限信任即可

    -- 允許創建函數權限信任
    set global log_bin_trust_function_creators=true ;

    -- 允許創建函數權限信任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 ; -- 調用存儲函數select myfunc1_emp();

    這樣就可以了

    四.存儲過程總結

    到此這篇關于SQL中的游標、異常處理、存儲函數及總結的文章就介紹到這了,更多相關SQL中的游標、異常處理、存儲函數內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

    標簽: MsSQL
    主站蜘蛛池模板: 全自动贴标机-套标机-工业热风机-不干胶贴标机-上海厚冉机械 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 安全光栅|射频导纳物位开关|音叉料位计|雷达液位计|两级跑偏开关|双向拉绳开关-山东卓信机械有限公司 | PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 欧必特空气能-商用空气能热水工程,空气能热水器,超低温空气源热泵生产厂家-湖南欧必特空气能公司 | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」| 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 微波萃取合成仪-电热消解器价格-北京安合美诚科学仪器有限公司 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | 葡萄酒灌装机-食用油灌装机-液体肥灌装设备厂家_青州惠联灌装机械 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 纯化水设备-纯水设备-超纯水设备-[大鹏水处理]纯水设备一站式服务商-东莞市大鹏水处理科技有限公司 | 预制围墙_工程预制围墙_天津市瑞通建筑材料有限公司 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 捆扎机_气动捆扎机_钢带捆扎机-沈阳海鹞气动钢带捆扎机公司 | 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 健身器材-健身器材厂家专卖-上海七诚健身器材有限公司 | 餐饮小吃技术培训-火锅串串香培训「何小胖培训」_成都点石成金[官网] | 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 防火板_饰面耐火板价格、厂家_品牌认准格林雅 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 欧美日韩国产一区二区三区不_久久久久国产精品无码不卡_亚洲欧洲美洲无码精品AV_精品一区美女视频_日韩黄色性爱一级视频_日本五十路人妻斩_国产99视频免费精品是看4_亚洲中文字幕无码一二三四区_国产小萍萍挤奶喷奶水_亚洲另类精品无码在线一区 | 铝机箱_铝外壳加工_铝外壳厂家_CNC散热器加工-惠州市铂源五金制品有限公司 | 南方珠江-南方一线电缆-南方珠江科技电缆-南方珠江科技有限公司 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 |