本文目錄一覽:
mysql 存儲過程
一個存儲過程包括名字,參數列表,以及可以包括很多SQL語句的SQL語句集。
創建存儲過程:
語法:
CREATE PROCEDURE p()
BEGIN
/*此存儲過程的正文*/
END
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(pro_price) AS priceaverage
FROM products;
END;
# begin…end之間是存儲過程的主體定義
# mysql的分界符是分號(;)
調用存儲過程的方法是:
# CALL加上過程名以及一個括號
# 例如調用上面定義的存儲過程
CALL productpricing();
# 哪怕是不用傳遞參數,存儲過程名字後面的括號“()”也是必須的
刪除存儲過程的方法是:
DROP PROCUDURE productpricing;
創建帶參數的存儲過程:
CREATE PROCUDURE productpricing(
OUT p1 DECIMAL(8,2),
OUT ph DECIMAL(8,2),
OUT pa DECIMAL(8,2)
)
BEGIN
SELECT Min(prod_price) INTO pl FROM products;
SELECT Max(prod_price) INTO ph FROM products;
SELECT Avg(prod_price) INTO pa FROM products;
END;
# DECIMAL用於指定參數的數據類型
# OUT用於表明此值是用於從存儲過程里輸出的
# MySQL支持 OUT, IN, INOUT
調用帶參數的存儲過程:
CALL productpricing(@pricelow,
@pricehigh,
@priceaverage);
# 所有的參數必須以@開頭
# 要想獲取@priceaverage的值,用以下語句
SELECT @priceaverage;
# 獲取三個的值,用以下語句
SELECT @pricehigh, @pricelow, @priceaverage;
另一個帶IN和OUT參數的存儲過程:
CREATE PROCEDURE ordertotal(
IN onumber INT,
OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END;
CALL ordertotal(20005, @total);
SELECT @total;
添加一個完整的例子:(這是一個自定義分頁的存儲過程)
DELIMITER $$
DROP PROCEDURE IF EXISTS `dbcall`.`get_page`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `get_page`(
/**//*Table name*/
tableName varchar(100),
/**//*Fileds to display*/
fieldsNames varchar(100),
/**//*Page index*/
pageIndex int,
/**//*Page Size*/
pageSize int,
/**//*Field to sort*/
sortName varchar(500),
/**//*Condition*/
strWhere varchar(500)
)
BEGIN
DECLARE fieldlist varchar(200);
if fieldsNames=”||fieldsNames=null THEN
set fieldlist=’*’;
else
set fieldlist=fieldsNames;
end if;
if strWhere=”||strWhere=null then
if sortName=”||sortName=null then
set @strSQL=concat(‘SELECT ‘,fieldlist,’ FROM ‘,tableName,’ LIMIT ‘,(pageIndex-1)*pageSize,’,’,pageSize);
else
set @strSQL=concat(‘SELECT ‘,fieldlist,’ FROM ‘,tableName,’ ORDER BY ‘,sortName,’ LIMIT ‘,(pageIndex-1)*pageSize,’,’,pageSize);
end if;
else
if sortName=”||sortName=null then
set @strSQL=concat(‘SELECT ‘,fieldlist,’ FROM ‘,tableName,’ WHERE ‘,strWhere,’ LIMIT ‘,(pageIndex-1)*pageSize,’,’,pageSize);
else
set @strSQL=concat(‘SELECT ‘,fieldlist,’ FROM ‘,tableName,’ WHERE ‘,strWhere,’ ORDER BY ‘,sortName,’ LIMIT ‘,(pageIndex-1)*pageSize,’,’,pageSize);
end if;
end if;
PREPARE stmt1 FROM @strSQL;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END$$
DELIMITER ;
mysql 存儲過程總結(一)
1、存儲過程定義:
存儲過程是事先經過編譯並存儲在數據庫中的一段 SQL 語句的集合,調用存儲過程可以簡化應用開發 人員的很多工作,減少數據在數據庫和應用服務器之間的傳輸,對於提高數據處理的效率是有好處的。 存儲過程思想上很簡單,就是數據庫 SQL 語言層面的代碼封裝與重用。
2、特點:
封裝,復用 : 可以把某一業務SQL封裝在存儲過程中,需要用到 的時候直接調用即可。
可以接收參數,也可以返回數據 :再存儲過程中,可以傳遞參數,也可以接收返回 值。
減少網絡交互,效率提升 : 如果涉及到多條SQL,每執行一次都是一次網絡傳 輸。 而如果封裝在存儲過程中,我們只需要網絡交互一次可能就可以了。
3、基本語法
(1)創建:
(2)調用:
(3)查看:
(4)刪除
注意: 在命令行中,執行創建存儲過程的SQL時,需要通過關鍵字 delimiter 指定SQL語句的 結束符。
MYSQL存儲過程即常用邏輯知識點總結
Mysql存儲過程
1.創建存儲過程語法(格式)
解析:
2.存儲過程內具體語法與邏輯
A.定義變量語法:
註:可以在參數類型後面加 DEFAULT NULL; 來設置初始值。
B.變量賦值:
方式1(直接對變量進行賦值):
方式2(sql查詢的結果直接賦值給變量):
方式3(sql查詢的結果直接賦值給多個變量):
c.邏輯判斷:
D.游標,(LOOP)循環:
3.存儲過程的調用
4.刪除存儲過程
5.注意事項
存儲過程中的分號(;)很重要,盡量不要省略。
mysql存儲過程
MySQL存儲過程創建的格式如下:
CREATE PROCEDURE 過程名 ([過程參數[,…]])[特性 …] 過程體
舉例代碼如下:
CREATE PROCEDURE proc1(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM user; END
存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,這裡有一個輸出參數s,類型是int型,如果有多個參數用”,”分割開。
過程體的開始與結束使用BEGIN與END進行標識。
注意:MySQL在5.0以前並不支持存儲過程
mysql怎麼調試存儲過程
mysql調試存儲過程具體方法:
在你的存儲過程中加入如下語句:
SELECT
變量1,變量2;
然後用mysql自帶的cmd程序進入mysql
下。
call
你的存儲過程名(輸入參數1,@輸出參數);(注:這裡幫助下新同學,如果你的存儲過程有輸出變量,那麼在這裡只需要加
@
然後跟任意變量名即可);
即可發現你的變量值被打印到了cmd下
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/151160.html