2014-01-17 44 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的存储过程实施是原始且低效的。