2014-01-17 43 views
1

我有一個我爲庫存管理程序創建的MYSQL過程。我可以通過爲其他構造函數創建另一個不同名稱的過程來輕鬆解決我自己的問題。我的問題是,「是否有一種方法,就像用一個類的構造函數編程一樣,在一個過程的聲明中定義一組單獨的指令,以便在過程中傳遞不同數量的變量時以不同的方式處理過程。」MYSQL過程的多個構造函數

我現在的程序:

DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `addorderitem`(ord decimal,prod decimal, quant decimal) 
BEGIN 
DECLARE sale decimal; 
SET sale = (SELECT saleprice FROM assessor.products WHERE idProducts=prod); 
SET SQL_SAFE_UPDATES=0; 
INSERT INTO orderitems (OrderNumber, idProducts, quantity, saleprice) VALUES (ord, prod, quant, sale); 
END 

程序增加了一個以訂單項目表的各行,檢索從產品表中的默認銷售價格第二個構造函數將被用來處理程序。在構造商提供銷售價格的情況下改爲

預先感謝您的幫助。

斯蒂芬·科爾曼 暈媒體技術

+0

你爲什麼要在數據庫而不是應用程序中完成所有這些工作?具有這種級別的存儲過程利用率的應用程序非常難以維護。 – tadman

回答

0

的回答你的問題是肯定的,但你很可能不得不使用PREPARE and EXECUTE,形成查詢在你的程序中的字符串,然後運行它。

如果你想用一個變量,而不是一個常量標量值替換查詢的任何部分,這是必要的。

在存儲過程中使用動態SQL需要注意使其正確。你的動機是讓你的程序編寫更方便,但讓我告訴你,使用動態SQL不會使編碼或調試變得更容易。這對性能也不好,並且會帶來SQL注入的風險,這很難檢測到。

事實上,我不建議在MySQL中使用存儲過程,除非極少數情況。他們被稱爲難以開發,難以調試,並且他們有性能問題。您可能習慣於在其他一些RDBMS品牌(如Oracle或Microsoft SQL Server)中使用過程,但您應該知道,與其他品牌相比,MySQL的存儲過程實施是原始且低效的。