在mysql函数中调用存储过程

时间:2013-07-01 11:15:23

标签: mysql

我可以在mysql函数中调用存储过程吗?我试过但它会抛出语法错误。有可能吗?

DELIMITER $$

DROP FUNCTION IF EXISTS `fn_abcd`$$

CREATE FUNCTION `fn_abcd`(orderItem BIGINT(45),quantity INT) RETURNS double
BEGIN

    DECLARE TotalNetValue DOUBLE;
   set TotalNetValue = call sp_abcd(orderItem,quantity);
    RETURN TotalNetValue;
    END$$

DELIMITER ;

1 个答案:

答案 0 :(得分:0)

存储过程没有返回值。你根本做不到这个:

SET someVar = CALL someProcedure();

如果您需要检索过程中计算的某些值,则需要:

  • 让你的存储过程在会话变量(SELECT something INTO @var)中写入数据(这很难看,但它有效)
  • 使用INOUT参数
  • 将过程重写为函数

据了解,大多数驱动程序(JDBC,PDO)将处理存储过程中执行的最后SELECT语句的结果,作为CALL some_procedure()之类的查询的结果。此功能为specific to the MySQL client/server protocol,MySQL SQL语法没有等效功能。