Stored procedures 带参数的MariaDB插入存储过程

Stored procedures 带参数的MariaDB插入存储过程,stored-procedures,mariadb,Stored Procedures,Mariadb,我将我的公司数据库从MySQL迁移到另一家托管公司,但不知道该托管公司使用MariaDB,在尝试使用我的IN参数创建存储过程时,MariaDB将该参数视为一个Column。请参阅下面的存储过程代码及其错误: 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

我将我的公司数据库从MySQL迁移到另一家托管公司,但不知道该托管公司使用MariaDB,在尝试使用我的IN参数创建存储过程时,MariaDB将该参数视为一个Column。请参阅下面的存储过程代码及其错误:

    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' 
列名是dracualCode,而不是'dracualCode\u p','dracualCode\u p'是传入存储过程的参数,但服务器将其视为字段名。我和托管公司谈过,他们说他们的数据库是MariaDB而不是MySQL。这段代码在MySQL服务器中也起作用


我将感谢您在此提供的任何有用帮助。

您忘记设置非默认分隔符,忘记将过程主体包装到
开始
/
结束
,这是必需的,因为它有多个语句

在您的例子中,使用body
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 ;

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

在您的例子中,使用body
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 ;