[英]MySQL Stored Procedure Not Storing
我正在嘗試編寫一個存儲過程,該過程檢查值是否存在,如果不存在,它將插入它。 我所遇到的問題是它沒有運轉。 此過程的模式是tag_id VARCHAR(24)主鍵和標簽varchar(255)
創建過程
DELIMITER //
CREATE PROCEDURE `create_tag_not_exist` (IN tag_id VARCHAR(24), IN tag VARCHAR(255))
BEGIN
IF(SELECT COUNT(*) FROM tags WHERE tag_id = tag_id <= 0 ) THEN
INSERT INTO tags(tag_id, tag) VALUES (tag_id, tag);
END IF;
END //
將數據插入其中
call create_tag_not_exist('abc123', 'doeraeme');
桌子仍然是空的。 難道我做錯了什么?
嘗試這個
DELIMITER //
CREATE PROCEDURE `create_tag_not_exist` (IN tagID VARCHAR(24),
IN tag VARCHAR(255))
BEGIN
IF( (SELECT COUNT(*) FROM tags WHERE tag_id = TagID)<1) THEN
INSERT INTO tags(tagID, tag) VALUES (tag_id, tag);
END IF;
END //
我將參數名稱從Tag_id更改為TagID,以防止字段名稱和參數名稱混淆。
首先,我將考慮在變量前面加上一些字符串,以將其與列名區分開來-這將使查詢更易於閱讀。 我使用下划線。
您的IF檢查錯誤-您的括號放在錯誤的位置。
IF (SELECT COUNT(*) FROM tags where tag_id = _tagid) = 0 THEN
THEN
INSERT INTO tags(tag_id, tag) VALUES (_tagid, _tag);
END IF;
我還建議將您的參數傳遞為與要查詢的列相同的類型。 否則,您將依賴類型轉換(如果存在)。 因此,tag_id實際上應該作為一個int傳遞(假設它是一個int)。
幾件事使您的存儲過程有些疑惑。 請嘗試以下操作:
drop table if exists tags;
create table tags
(
tag_id smallint unsigned not null primary key,
name varchar(255) unique not null
)
engine=innodb;
drop procedure if exists insert_tag;
delimiter #
create procedure insert_tag
(
in p_tag_id smallint unsigned,
in p_name varchar(255)
)
proc_main:begin
if exists (select 1 from tags where tag_id = p_tag_id) then
leave proc_main;
end if;
insert into tags (tag_id, name) values (p_tag_id, p_name);
end proc_main #
delimiter ;
call insert_tag(1,'tag one');
call insert_tag(2,'tag two');
call insert_tag(1,'tag one');
call insert_tag(3,'tag three');
select * from tags;
希望這可以幫助 :)
假設tag_id
不為NULL,則始終為true:
WHERE tag_id = tag_id
一種解決方案是為參數賦予與列不同的名稱:
WHERE tag_id = parameter_tag_id
或為列添加表別名作為前綴:
FROM tags WHERE tags.tag_id = tag_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.