以前對mysql的認識與應用只是停留在增刪改查的階段,最近正好在學習mysql相關內容,看了一本書叫做《MySQL必知必會》,看了之後對MySQL的高級用法有了一定的瞭解。以下內容只當讀書筆記。 如有轉載請註明出處~ 存儲過程的使用 執行存儲過程 執行名為productpricing的存儲過程 創建 ...
以前對mysql的認識與應用只是停留在增刪改查的階段,最近正好在學習mysql相關內容,看了一本書叫做《MySQL必知必會》,看了之後對MySQL的高級用法有了一定的瞭解。以下內容只當讀書筆記。
如有轉載請註明出處~
存儲過程的使用
執行存儲過程
CALL productpricing()
執行名為productpricing的存儲過程
創建存儲過程
CREATE PROCEDURE productpricing() BEGIN SELECT avg(prod_price) AS priceaverage FROM products; END;
註意:如果使用mysql的命令行程式,";"是分隔符,存儲過程中也有";"這樣會造成使用存儲過程中的SQL出現語法錯誤,解決辦法是臨時更改語句的分隔符:
DELIMITER // .... DELIMITER ;
其中,除了\ 之外,任何字元都可以用作語句分隔符
刪除存儲過程
DROP PROCEDURE productpring;
只是給出存儲過程的名字,不用跟()
存儲過程參數的使用
--創建存儲過程 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(234567, @total) --顯示結果 SELECT @total
智能存儲過程
前面的存儲過程只是為瞭解及學習使用,實際應用中的存儲過程不是像上面的一樣簡單。如下是一較為複雜的存儲過程:
-- 創建一個名為ordertotal的存儲過程 -- 參數:onumber-訂單號 taxable-是否上稅(0,不需要 1,需要) ototal-返回的合計 CREATE PROCECURE ordertotal( IN onumber INT, IN taxable BOOLEAN, OUT ototal DECIMAL(8,2) ) COMMENT 'Obtain order total, optionally adding tax' BEGIN -- 定義臨時變數total-存儲查詢到的合計 DECLARE total DECIMAL(8,2) -- 臨時變數taxrate-稅點 DECLARE taxrate INT DEFAULT 6; -- 得到查詢的合計 SELECT Sum(item_price * quantity) FROM orderitems WHERE order_num = onumber INTO total; -- 判斷是否需要上稅 IF taxable THEN -- 需要,將上稅部分添加進合計 SELECT total+(total/100*taxrate) INTO total; END IF; -- 將最終的合計返回 SELECT total INTO ototal; END;