mysql - 我的mysql存储过程有什么问题?
问题描述
我有一个存储过程来检查表中是否已经存在新条目。如果存在,则不会发生插入。当我运行它时,出现错误
DROP PROCEDURE IF EXISTS AddPriority2;
DELIMITER $$
CREATE PROCEDURE AddPriority2
(
IN strName VARCHAR(100),
OUT itExists INT
)
BEGIN
DECLARE
SELECT COUNT(Id) INTO itExists
FROM priorities
WHERE Name = strName AND StatId = 1;
IF(itExists = 0) THEN
INSERT INTO priorities
(
NAME,
StatId
)
VALUES
(
strName,
1
);
END IF;
END
这是错误
Query: CREATE PROCEDURE AddPriority2 ( IN strName VARCHAR(100), OUT itExists INT ) BEGIN DECLARE SELECT COUNT(Id) INTO itExists FROM pr...
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SELECT COUNT(Id) INTO itExists
FROM priorities
WHERE Name = strName AND StatId =' at line 8
解决方案
1)你不能声明一个选择语句 - 一个声明必须是一个变量..(我不会为此使用输出参数)2)或者你可以使用exists代替
if not exists (select 1 from priorities WHERE Name = strName AND StatId = 1) then
insert...
end if;
推荐阅读
- python - 理解编码为一个热向量的 DNA 序列的一维卷积
- html - 如何在 Chrome 中进行断词:打破所有工作?
- node.js - 处理 postresql 和 nodejs 查询时出错
- node.js - npm start 停止工作,但 sudo npm start 仍然有效
- python - python lambda和常规函数之间一定有区别吗?
- r - 事后自定义对比 - glmmTMB 与 poly()
- java - Java通配符泛型在方法中的返回类型
- c# - 哪个函数/模块首先在数据库中生成 .edmx 文件?
- excel - 如何将数据框更新/写入位于 S3 存储桶中的 excel 文件中
- blockchain - Ethermint 和 Burrow 的区别