2017-04-18 18 views
0

私の会社データベースをMySQLから別のホスティング会社に移行しました。ホスティング会社がMariaDBを使用していることを知らず、INパラメータでストアドプロシージャを作成しようとするとMariaDBはパラメータをcolumnnとして見ています。エラーで、以下のストアドプロシージャのコードを参照してください: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は」ストアドプロシージャに渡されたパラメータがあるが、サーバーは、フィールド名としてそれを見ています。私はホスティング会社と話をし、彼らのデータベースはMySQLではなくMariaDBだと言った。この同じコードは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 ; 
関連する問題