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パラメータを使用する
  • 手続きを関数として書き直す

SELECTほとんどのドライバー (JDBC、PDO) は、ストアド プロシージャで最後に実行されたステートメントの結果を、 のようなクエリの結果として扱うことが理解されていますCALL some_procedure()。この機能はMySQL クライアント/サーバー プロトコルに固有のものであり、MySQL SQL 構文には同等のものはありません。

于 2013-07-01T12:27:17.603 に答える