2017-04-18 39 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 ;