我的 EXECUTE 命令有什么问题?

What's wrong with my EXECUTE command?

我正在尝试制作一个 PROCEDURE 以便更轻松地将用户在其设置中所做的更改(如服务器日志,你知道的)存储到 table user_settings_changelog.我终于制作了 PROCEDURE acceptable 所以我的 sql 程序 (HeidiSQL) 将存储它。现在的问题是:如何正确地 EXECUTE 它。我用多行代码尝试了多次,但似乎没有任何效果。有人可以帮我吗?

PROCEDURE查询:

DELIMITER $$
CREATE PROCEDURE setting_adjustment_log (name_setting VARCHAR(45), 
changed_from VARCHAR(45), changed_to VARCHAR(45), username 
VARCHAR(45))
BEGIN
    INSERT INTO user_settings_changelog
    VALUES (GETDATE(), name_setting, changed_from, changed_to, 
username);
END$$

table user_settings_changelog 有 5 列:日期 DATETIME, name_setting VARCHAR(45), changed_from VARCHAR(45), changed_to VARCHAR(45) 和用户名 VARCHAR(45).

EXECUTE查询:

EXECUTE setting_adjustment_log ('background','black','white','TheCoderNoob');

错误 HeidiSQL 给我:

SQL 错误 (1064):您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在“('background','black','white','TheCoderNoob')' 附近使用的正确语法1

提及可能有用:我使用的是几年前的 USBwebserver 版本。

编辑:我一直在查看 MySQL Workbench 中的 EXECUTE/CALL 查询一段时间,似乎数据库希望在过程的名称和给定的数据或其他东西。当我将鼠标悬停在它上面时,它显示为:

语法错误:'background'(单引号文本)在此位置不是有效输入

首先,您应该始终在 insert 语句中包含列名。 (可能会有一些例外,但如果您正在学习 SQL,那么请坚持最佳实践。)

其次,将输入参数与可能的列名区分开来。

第三,你的代码看起来像 MySQL,所以使用 NOW() 或类似的函数:

DELIMITER $$
CREATE PROCEDURE setting_adjustment_log (
    in_name_setting VARCHAR(45), 
    in_changed_from VARCHAR(45),
    in_changed_to VARCHAR(45),
    in_username VARCHAR(45)
)
BEGIN
    INSERT INTO user_settings_changelog (date, name_setting, changed_from, changed_to, username)
    VALUES (NOW(), in_name_setting, in_changed_from, in_changed_to, 
in_username);
END$$

调用存储过程时,使用call:

CALL setting_adjustment_log('background', 'black', 'white', 'TheCoderNoob');