Ola*_*ept 1 stored-procedures mariadb
我将我的公司数据库从 MySQL 迁移到另一家托管公司,但不知道该托管公司使用 MariaDB,在尝试使用我的 IN 参数创建存储过程时,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'
Run Code Online (Sandbox Code Playgroud)
列名称是 WithdrawalCode 而不是 'withdrawalcode_p','withdrawalcode_p' 是传递给存储过程的参数,但服务器将其视为字段名称。我和托管公司谈过,他们说他们的数据库是 MariaDB 而不是 MySQL。相同的代码在 MySQL 服务器中工作。
我将感谢这里提供的任何有用的帮助。
您忘记设置非默认分隔符并将过程主体包装到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 ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9929 次 |
| 最近记录: |