MYSQL过程的多个构造函数

时间:2014-01-17 18:32:02

标签: mysql stored-procedures

我有一个我为库存管理程序创建的MYSQL程序。我可以通过为另一个构造函数创建另一个具有不同名称的过程来轻松地解决我自己的问题。我的问题是,“对于类的构造函数的编程,有没有办法在过程声明中定义一组单独的指令,以便在向过程传递不同数量的变量时以不同方式处理过程。” / p>

我目前的程序:

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

该过程将订单的单独行添加到订单商品表中,从products表中检索默认销售价格。如果构造函数提供了销售价格,则第二个构造函数将用于处理该过程。

提前感谢你的帮助。

斯蒂芬科尔曼 Halo Media Tech

1 个答案:

答案 0 :(得分:0)

您的问题的答案是肯定的,但您可能必须使用PREPARE and EXECUTE在您的过程中将查询形成为字符串,然后运行它。

如果要使用变量替换查询的任何部分,而不是常量标量值,则必须执行此操作。

在存储过程中使用动态SQL需要注意使其正确。您的动机是使编写程序更方便,但是让我告诉您使用动态SQL不会使编码或调试更容易。它对性能也不利,它开辟了SQL注入的风险,很难检测到。

事实上,除了极少数情况外,我不建议在MySQL中使用存储过程。众所周知,它们难以开发,难以调试,并且存在性能问题。您可能习惯于在其他一些RDBMS品牌(如Oracle或Microsoft SQL Server)中使用过程,但您应该知道,与其他品牌相比,MySQL的存储过程实现是原始的,效率低下。

相关问题