MySQL存储过程编程教程读书笔记-第二章MySQL存储过程编程指南-存_MySQL
bitsCN.com
MySQL存储过程编程时一个复杂的主题,我们将在本章中为你提供完成基本任务的内容,其中包括:
1、怎样创建存储过程
2、存储过程怎样进行输入输出
3、怎样和数据库交互
4、怎样用MySQL存储编程语言创建过程,函数和触发器
第一个存储过程实例:
delimiter $$drop procedure if exists HelloWorld$$create procedure HelloWorld()begin select "Hello World";end $$变量
本地变量可以用declare语句进行声明。变量名称必须遵循MySQL的列明规则,并且可以使MySQL内建的任何数据类型。你可以用default字句给变量一个初始值,并且可以用SET语句给变量赋一个新值
delimiter $$drop procedure if exists variable_demo$$begin declare my_integer int; declare my_big_integer bigint; declare my_currency numeric(8, 2); declare my_pi float default 3.1415926; declare my_text text; declare my_dob date default '1960-06-21'; declare my_varchar varchar(30) default "Hello World!"; set my_integer = 20; set my_big_integer = power(my_integer, 3);end $$delimiter;
参数
参数可以使我们的存储程序更为灵活,更为实用。参数包括IN(只读模式), INOUT(可读写模式)和OUT(只写模式)。IN模式作为缺省的参数模式。
IN:任何对于该参数的修改都不会返回给调用它的程序
OUT:这个模式意味着存储过程可以对参数赋值(修改参数的值),并且这个被修改的值会被返回给它的调用程序
INOUT:这个模式意味着存储过程即可读取传入的参数,而且任何对于该参数的修改对于它的调用程序而言都是可见的
对于存储函数而言,只能使用IN模式
delimiter $$drop procedure if exists my_sqrt$$create procedure my_sqrt(input_number int, out out_number float)begin set out_number = SQRT(input_number);end $$delimiter;
call my_sqrt(12, @out_value) $$select @out_value $$条件执行
通过购买量的多少来计算出贴现率的存储程序,购买量超过$500可以返回20%,购买量超过$100可以返回10%。
delimiter $$drop procedure if exists discounted_price$$create procedure discounted_price(normal_price NUMERIC(8, 2), out discount_price NUMBERIC(8, 2))begin if (normal_price > 500) then set discount_price = normal_price*.8; else if (normal_price > 100) then set discount_price = normal_price*.9; else set discount_price = normal_price; end if;end$$delimiter;循环
MySQL存储程序语言提供了三种类型的循环
使用LOOP和END LOOP字句的简单循环
当循环条件为真时继续执行的循环,使用WHILE和END WHILE字句
循环直至条件为真,使用REPEAT和UNTIL字句
在这三种循环中,你都可以使用LEAVE字句来终止循环
DELIMITER $$DROP PROCEDURE IF EXISTS simple_loop$$CREATE PROCEDURE simple_loop()BEGIN DECLARE counter INT DEFAULT 0; my_simple_loop: LOOP SET counter = counter 1; IF counter = 10 THEN LEAVE my_simple_loop; END IF; END IF;END LOOP my_simple_loop;select "I can count to 10";END$$ DELIMITER;错误处理
1、如果你认为内嵌的SQL语句会返回空记录,或者你想用游标捕获SELECT语句所返回的记录,那么一个NO FOUND 错误处理可以防止存储过程过早的被终止
2、如果你认为SQL语句可能返回错误(比如违背约束条件),你可以创建一个错误处理来阻止程序终止。这个处理将代替你的默认错误处理并继续程序的执行。
和数据库交互
大多数存储过程包含了各种和数据库表的交互,它们包括四种主要的交互:
1、将一个SQL语句所返回的单个记录放入本地变量中。
2、创建一个“游标”来迭代SQL语句所返回的结果集
3、执行一个SQL语句,将执行后的结果集返回给它的调用程序
4、内嵌一个不反悔结果集的SQL语句,如INSERT,UPDATE, DELETE等
对本地变量使用SELECT INTO
当需要在单个记录数据中获取查询信息,你就可以使用SELECT INTO 语法(无论是使用单个记录,多个记录的混合数据,还是多个表连接)。在这种情况下,你可以再SELECT语句中跟随一个INTO子句,告诉MySQL得到的查询数据返回给谁
DELIMITER $$ DROP PROCEDURE IF EXISTS customer_sales $$ CREATE PROCEDURE customer_sales(int_customer_id INT) READS SQL DATA BEGIN DECLARE total_sales NUMERIC(8, 2); SELECT SUM(sale_value) INTO total_sales FROM sales WHERE customer_id = in_customer_id; SELECT CONCAT('Total sales for ', in_customer_id, 'is', 'total_sales'); END; $$
使用游标
SELECT INTO 定义了单记录查询,但是很多应用程序要求查询多记录数据,你可以使用MySQL中的游标来实现这一切,游标允许你将一个或更多的SQL结果集放进存储程序变量中,通常用来执行结果集中各个单记录的处理。
DELIMITER $$ DROP PROCEDURE cursor_example() READ SQL DATA BEGIN DECLARE l_employee_id INT; DECLARE l_salary NUMERIC(8, 2); DECLARE l_department_id INT; DECLARE done INT DEFAULT 0; DECLARE curl CURSOR FOR SELECT employee_id, salary, department_id FROM employees; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN curl; emp_loop : LOOP FETCH curl INTO l_employee_id, l_salary, l_department_id; IF done = 1 THEN LEAVE emp_loop; END IF; END LOOP emp_loop;
END;$$ bitsCN.com

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

本站6月24日消息,在6月21日HDC2024華為開發者大會主題演講上,華為終端BG軟體部總裁龔體正式官宣了華為自研倉頡程式語言。語言歷經5年研發沉澱,現已開啟開發者預覽。華為開發者官網現已推出倉頡編程語言官方入門教程視頻,方便開發者初步上手理解。教程將帶使用者體驗倉頡、學習倉頡、應用倉頡,包括用倉頡語言估算圓周率、計算2024年各月的干支紀法、看到二叉樹在倉頡語言中的N種表達方式,以及用枚舉類型實現代數計算、用介面和擴充實現訊號系統模擬,還有用倉頡宏擴展出新語法等等。本站附教學存取位址:ht

本站6月21日消息,在今日下午的HDC2024華為開發者大會上,華為終端BG軟體部總裁龔體正式官宣了華為自研倉頡編程語言,並發布了HarmonyOSNEXT倉頡語言開發者預覽版。這是華為首次公開發布倉頡程式語言。龔體表示:「2019年,倉頡程式語言計畫在華為誕生,歷經5年研發沉澱,大量研發投入,今日終於和全球開發者見面。倉頡程式語言透過現代語言特性的整合、全方位的編譯優化和運行時實現、以及開箱即用的IDE工具鏈支持,為開發者打造友好開發體驗和卓越程序性能。

本站6月21日消息,華為自研倉頡程式語言今日正式亮相,官方宣布開啟HarmonyOSNEXT倉頡語言開發者預覽版Beta招募。本次升級為開發者預覽版嚐鮮升級,提供倉頡語言SDK、開發者指南以及相關的DevEcoStudio插件,供開發者使用倉頡語言開發、調試及運行HarmonyOSNext應用。報名週期:2024年6月21日-2024年10月21日申請要求:本次HarmonyOSNEXT倉頡語言開發者預覽版Beta招募活動,僅開放給以下開發者報名:1)已在華為開發者聯盟完成實名認證;2)完成H

本站6月22日消息,華為昨日向全球開發者介紹華為自研程式語言-倉頡(Cangjie)。這是倉頡程式語言的首次公開亮相。本站查詢獲悉,天津大學、北京航空航天大學深度參與了華為「倉頡」的研發。天津大學:倉頡程式語言編譯器天津大學智能與計算學部軟體工程團隊攜手華為倉頡團隊,深度參與倉頡程式語言編譯器的品質保障研究。據介紹,倉頡編譯器是與倉頡程式語言共生的基礎軟體。在倉頡程式語言的籌備階段,與之相匹配的高品質編譯器成為核心目標之一。隨著倉頡程式語言的演化,倉頡編譯器也不斷升級、改進。五年來,天津大

近期有很多小夥伴諮詢小編MicrosoftEdge瀏覽器不顯示圖片怎麼辦,接下來就讓我們一起學習一下MicrosoftEdge瀏覽器不顯示圖片的解決方法吧,希望可以幫助到大家。 1.先點選左下角開始,右鍵點選“Microsoftedge瀏覽器”,如下圖所示。 2、然後選擇“更多”,點擊“應用設定”,如下圖所示。 3、接著下滑找到“圖片”,如下圖。 4.最後將圖片下方的開關打開即可,如下圖所示。上面就是小編為大家帶來的MicrosoftEdge瀏覽器不顯示圖片怎麼辦的全部內容,希望對大家能夠有所幫助喔。

本站6月21日消息,在HDC2024華為開發者大會前,華為自研倉頡程式語言正式亮相,倉頡官網現已上線。官網介紹顯示,倉頡程式語言是一款面向全場景智慧的新一代程式語言,主打「原生智慧化、天生全場景、高效能,強大安全」。融入鴻蒙生態,為開發者提供良好的程式設計體驗。本站附官網介紹如下:原生智慧化內嵌AgentDSL的程式框架,自然語言&程式語言有機融合;多Agent協同,簡化符號表達,模式自由組合,支援各類智慧應用開發。天生全場景輕量化可縮放運行時,模組化分層設計,記憶體再小也能裝得下;全場景領域擴

C++與其他現代程式語言的優缺點比較為:C++優勢:高效能、低階控制、豐富的函式庫生態系統。 C++劣勢:學習曲線陡峭、手動記憶體管理、可移植性受限。 Python優勢:學習曲線平滑、廣泛的函式庫支援、解譯型語言。 Java優勢:平台無關、自動記憶體管理、廣泛應用。 JavaScript優勢:前端開發必備、輕量、動態型別。

6月21日消息,今天下午,華為開發者大會2024將正式揭幕。 「純血鴻蒙」HarmonyOSNEXT自然是重中之重,按照餘承東之前透露的規劃,今天下午就可能正式宣佈公測,普通消費者也能嚐鮮「純血鴻蒙」了。據爆料,首批支援的手機為Mate60系列和Pura70系列。值得注意的是,作為“純血鴻蒙”,HarmonyOSNEXT去掉了傳統的Linux核心和AOSP安卓開源程式碼,全端自研。據新浪科技最新報道稱,華為還將補齊鴻蒙生態的最後一環,在大
