0

我可以在 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 ;
4

1 回答 1

0

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

SET someVar = CALL someProcedure();

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

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

据了解,大多数驱动程序(JDBC、PDO)会将SELECT存储过程中执行的最后一条语句的结果视为查询的结果,如CALL some_procedure(). 此功能特定于 MySQL 客户端/服务器协议,MySQL SQL 语法没有等效项。

于 2013-07-01T12:27:17.603 回答