MariaDB Вставить хранимую процедуру с параметром

Я перенес базу данных своей компании из MySQL в другую хостинговую фирму, не зная, что хостинговая фирма использует MariaDB, при попытке создать свою хранимую процедуру с моим параметром IN, MariaDB видит этот параметр как columnn. Смотрите код хранимой процедуры ниже с ошибкой:

    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, а не "изъятие-код_p", "изъятие-код_p" - это параметр, передаваемый хранимой процедуре, но сервер видит его как имя поля. Я говорил с хостинговой фирмой, и они сказали, что их база данных - MariaDB, а не MySQL. Этот же код работал на сервере MySQL.

Буду признателен за любую полезную помощь, оказанную здесь.

1 ответ

Вы забыли установить разделители не по умолчанию и обернуть тело процедуры в 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 ;
Другие вопросы по тегам