2017-04-18 40 views
0

我将公司数据库从MySQL迁移到另一个不知道托管公司使用MariaDB的托管公司,尝试使用IN参数创建存储过程后,MariaDB将参数视为一个列。请参见下面的存储过程的代码与错误:MariaDB插入带参数的存储过程

CREATE PROCEDURE ADD_WITHDRAWAL_A(IN withdrawalcode_p VARCHAR(25), IN id_p VARCHAR(8), IN amount_p VARCHAR(12), IN datewithdrawn_p VARCHAR(35), IN approved_p VARCHAR(8)) 

    START TRANSACTION; 

    INSERT INTO Withdrawals(WithdrawalCode, IDD, Amount, DateWithdrawn, Approved) 
    VALUES (withdrawalcode_p, id_p, amount_p, datewithdrawn_p, approved_p); 

    UPDATE account SET AccountBalance = AccountBalance - amount_p WHERE IDD = id_p LIMIT 1; 

    COMMIT; 

    ***** AFTER RUNNING THE ABOVE CODE, MARIADB GAVE THIS ERROR : 

    Error 
    SQL query: 

    INSERT INTO WithdrawalRequest(WithdrawalCode, IDD, Amount, DateWithdrawn, Approved) 
    VALUES (withdrawalcode_p, id_p, amount_p, datewithdrawn_p, approved_p); 

MySQL said: Documentation 

#1054 - Unknown column 'withdrawalcode_p' in 'field list' 

列名是WithdrawalCode而不是“withdrawalcode_p”,“withdrawalcode_p”是在传递给存储过程的参数,但服务器看到它作为一个字段名。我与托管公司交谈过,他们说他们的数据库是MariaDB,而不是MySQL。这个相同的代码在MySQL服务器上工作。

我会很感激这里提供的任何有用的帮助。

回答

0

您忘记了设置非默认分隔符并将过程主体封装到BEGIN/END,由于它有多个语句,因此这是必需的。

您的情况会发生什么情况是使用正文START TRANSACTION创建的过程,其余部分被认为是一组普通的陈述。相反,尝试

DELIMITER $$ 

CREATE PROCEDURE ADD_WITHDRAWAL_A(IN withdrawalcode_p VARCHAR(25), IN id_p VARCHAR(8), IN amount_p VARCHAR(12), IN datewithdrawn_p VARCHAR(35), IN approved_p VARCHAR(8)) 
BEGIN 

    START TRANSACTION; 

    INSERT INTO Withdrawals(WithdrawalCode, IDD, Amount, DateWithdrawn, Approved) 
    VALUES (withdrawalcode_p, id_p, amount_p, datewithdrawn_p, approved_p); 

    UPDATE account SET AccountBalance = AccountBalance - amount_p WHERE IDD = id_p LIMIT 1; 

    COMMIT; 

END $$ 

DELIMITER ;