簡體   English   中英

MySQL存儲過程不存儲

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM