mysql中的存储过程,无法找出语法错误
这是我的程序,下面是我的错误,除了众多的mysql中的存储过程,无法找出语法错误,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,这是我的程序,下面是我的错误,除了众多的缺失,我在第2行缺失了什么 创建过程sp\u insertonject @id int 像 开始 启动交易; 更新内容\u manager.submission SET state='Rejected',其中id=@id; 插入内容管理器。提交被拒绝 (id int、link_initial varchar、email varchar、id_category int、state varchar、link_final varchar、ip_sub int、s
代码>缺失,我在第2行缺失了什么
创建过程sp\u insertonject
@id int
像
开始
启动交易;
更新内容\u manager.submission SET state='Rejected',其中id=@id;
插入内容管理器。提交被拒绝
(id int、link_initial varchar、email varchar、id_category int、state varchar、link_final varchar、ip_sub int、sub_date datetime)
选择
submission.id、submission.link\u首字母、submission.email、submission.id\u类别、submission.state、submission.link\u final、submission.ip\u sub、submission.sub\u日期
从…起
内容管理器提交
其中content_manager.submission.id=@id
犯罪
终止
我真的不明白我遗漏了什么语法错误,请帮忙
附言:我正在phpMyAdmin上做我的程序,如果这改变了什么
使用时,错误会移动:
创建过程sp\u insertonject
(
IN-id-int
)
开始
启动交易;
更新内容\u manager.submission SET state='Rejected',其中id=@id;
插入内容管理器。提交被拒绝
(id、链接首字母、电子邮件、id类别、状态、链接终字母、ip子字母、子字母日期)
选择submission.id、submission.link\u initial、submission.email、submission.id\u category、submission.state、submission.link\u final、submission.ip\u sub、submission.sub\u date
从content_manager.submission
其中content_manager.submission.id=@id;
犯罪
终止
错误:
#1064 - Syntax error in the query SQL near '' line 6
仍然没有解决方案您从另一个数据库(可能是SQL SERVER)复制了代码。mysql处理这些事情的方式不同
DELIMITER $$
CREATE PROCEDURE sp_insertOnReject
(IN_id int)
BEGIN
START TRANSACTION;
SET @id = _id;
UPDATE content_manager.submission SET state = 'Rejected' WHERE id = @id;
INSERT INTO content_manager.submission_rejected
(id ,link_initial ,email ,id_category ,state ,link_final ,ip_sub,sub_date)
SELECT
submission.id, submission.link_initial, submission.email, submission.id_category, submission.state, submission.link_final, submission.ip_sub, submission.sub_date
FROM
content_manager.submission
WHERE content_manager.submission.id = @id;
COMMIT;
END$$
DELIMITER ;
请找到程序。你的程序中有很多问题
- 参数声明
作为添加的
- 插入到包含数据类型的变量中
- 遗漏分号
请检查语法:CREATE[DEFINER=user]PROCEDURE sp_name([proc_parameter[,…
is@id是一个输入参数吗?如果是,则应该像CREATE PROCEDURE sp_insertOnReject(在inp_id int中)一样将其括在括号内。您正在使用的MYSQL版本以及发布的ddl和dml将有助于进一步修复查询。将其包装在括号内不会改变任何东西,同一行上出现相同的错误,我的MYSQL是8.0版本。为什么您尝试在过程头和过程体之间放置as
?我为您提供了一个链接,其中包含语法和大量错误示例。您试图解决什么问题?您被困在哪里?我已经知道缺少分号(正如我在问题中所写的),我用您的解决方案试一试,仍然是一个错误,我将更新问题以显示给您you@GabrieleBattistata如果您知道分号,那么为什么要发布关于错误是什么的问题?如果您遵循的是的最小部分,您将很容易找到有问题的地方。因为错误不是分号,因为在中不需要它它告诉我发现错误的那一行其中id=id
将对每一行应用更新。SQL如何知道第一个id是表中的一列,而第二个id是过程参数?它不知道。它将两者解释为表中的列,因此id=id
将在每一行上都是真的。解决方案:命名您的过程参数与查询中引用的表的任何列都不相同的其他名称。不(?),我不喜欢它,如果没有错误,请尝试我的解决方案
DELIMITER $$
CREATE PROCEDURE sp_insertOnReject
(IN_id int)
BEGIN
START TRANSACTION;
SET @id = _id;
UPDATE content_manager.submission SET state = 'Rejected' WHERE id = @id;
INSERT INTO content_manager.submission_rejected
(id ,link_initial ,email ,id_category ,state ,link_final ,ip_sub,sub_date)
SELECT
submission.id, submission.link_initial, submission.email, submission.id_category, submission.state, submission.link_final, submission.ip_sub, submission.sub_date
FROM
content_manager.submission
WHERE content_manager.submission.id = @id;
COMMIT;
END$$
DELIMITER ;
CREATE PROCEDURE sp_insertOnReject
(
IN InputId int
)
BEGIN
START TRANSACTION;
UPDATE content_manager.submission SET state = 'Rejected' WHERE id = InputId;
INSERT INTO content_manager.submission_rejected
(id, link_initial, email, id_category, state, link_final, ip_sub, sub_date)
SELECT submission.id, submission.link_initial, submission.email, submission.id_category, submission.state, submission.link_final, submission.ip_sub, submission.sub_date
FROM content_manager.submission
WHERE content_manager.submission.id = InputId;
COMMIT;
END