存储过程(mysql)失败,“无法在给定的上下文中返回结果集”

时间:2011-03-27 08:00:34

标签: mysql stored-procedures

如果某些条件失败等等,我正试图让这个SP返回(离开)。

此代码验证并保存过程,但是当我使用以下命令调用该过程时

CALL ACH_Deposit(30027616,3300012003,200.00,"USD", "127.0.0.1")

失败并出现错误:“过程无法返回给定上下文中的结果集”

有没有人知道错误是什么?

程序代码:

CREATE DEFINER=`redpass_web_urs`@`%` PROCEDURE `ACH_Deposit`(
IN __Account_ID BIGINT,
IN __To_Bank_Account BIGINT,
IN __Amount DECIMAL(10,2),
IN __Currency CHAR(3),
IN __IP_Address VARCHAR(50)
)
COMMENT 'Makes a ACH deposit'
BEGIN

-- Declare Account Parameters
DECLARE _Account_Status INT;
DECLARE __Transaction_ID INT;
DECLARE _Account_Type INT DEFAULT 0;
DECLARE _Fee INT;

SELECT              
    Account_Status AS _Account_Status,
    Account_Type AS _Account_Type
FROM Account_Users 
WHERE Account_ID = __Account_ID;

main: BEGIN

    -- Step 1, is account active ?
    IF _Account_Status <> 1 THEN
        -- Account must be active (not restricted, closed etc)
        SELECT Response_Code, Description FROM ResponseCodes WHERE Response_Code = 106;
        LEAVE main; -- Here we die..
    END IF;

    -- Step 2, Calculate the FEE (Loading Funds with ACH)
    IF _Account_Type = 1 THEN
        -- Personal Account
        SET _Fee = (SELECT Fee_Template_Personal_1 FROM Fees WHERE Fee_Type_ID = __Fee_Type_ID);

    ELSE
        -- Business Account
        SET _Fee = (SELECT Fee_Template_Business_1 FROM Fees WHERE Fee_Type_ID = __Fee_Type_ID);

    END IF;

    -- Step 3, Check that Fee is not bigger then the actual amount
    IF _Fee > __Amount THEN

        SELECT Response_Code, Description FROM ResponseCodes WHERE Response_Code = 108;
        LEAVE main; -- Here we die..

    END IF;

    -- If we come here, we can make the transactions
    INSERT INTO Bank_Transaction
       (Bank_Account_ID
       ,Transaction_Type
       ,Amount
       ,IP_Address
       ,Pending)
     VALUES
       (__To_Bank_Account
       ,11
       ,__Amount
       ,__IP_Address
       ,1); -- Reserverade pengar

    -- Transaction ID
    SET __Transaction_ID = (SELECT LAST_INSERT_ID());

    -- Deduct the Fee
    INSERT INTO Bank_Transaction
           (Bank_Account_ID
           ,Transaction_Type
           ,Amount
           ,Fee_Type_ID
           ,Fee_Transaction_ID)
        VALUES
           (__To_Bank_Account
           ,4
           ,-__Fee
           ,21
           ,__Transaction_ID);



END main;

SELECT Response_Code, Description, __Transaction_ID AS Transaction_ID
FROM ResponseCodes 
WHERE Response_Code = 1;

END

1 个答案:

答案 0 :(得分:1)

要从存储过程中检索多个结果集,您应该使用支持多个查询的客户端。

如果您使用PHP,请使用MySQLi扩展程序并使用mysqli_multi_query调用该程序。

MySQL扩展只能检索proc返回的第一个记录集。为了能够使用ti,您应该在参数CLIENT_MULTI_RESULTS中将131072(十进制$client_flags)设置为mysql_connect

相关问题