mysql 存储过程中的 if exists 判断问题
发布网友
发布时间:2022-05-05 17:03
我来回答
共5个回答
懂视网
时间:2022-05-07 18:19
bitsCN.com
以下这样写会报错:
[Error] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'end if' at line 8 create procedure test(in a int) if a > 1 then select 1; elseif a>2 then select 2; else end if; [xhtml]create procedure test(in a int) if a > 1 then select 1; elseif a>2 then select 2; else end if; 应改成以下这样: create procedure test(in a int) if a > 1 then select 1; elseif a>2 then select 2; else -- do nothing -- set @tmp=1; end if; 作者 zhu473105308 bitsCN.com
热心网友
时间:2022-05-07 15:27
mysql没有drop index index_name if exists on table_name这样的语法,所以写一个存储过程来判断,如果存在就删除后再创建新的索引。存储过程如下:
--
-- procere of delete index
--
drop procere if exists Del_idx;
DELIMITER $$
CREATE PROCEDURE Del_idx(IN p_tablename varchar(200), IN p_idxname VARCHAR(200))
begin
DECLARE str VARCHAR(250);
SET @str=concat(' drop index ',p_idxname,' on ',p_tablename);
SELECT COUNT(*) INTO @cnt FROM information_schema.statistics WHERE TABLE_NAME=p_tablename AND INDEX_NAME=p_idxname;
if @cnt >0 then
PREPARE stmt FROM @str;
EXECUTE stmt ;
end if;
end $$
DELIMITER ;
使用时传入表名和索引名即可,如CALL Del_idx('tableA', 'indexA');
热心网友
时间:2022-05-07 16:45
SELECT没有IF EXISTS 语法,你可以用select count(*) from information_schema.tables where table_schema='your_schema' and table_name='your_tab';看返回0还是1来判断。
热心网友
时间:2022-05-07 18:20
select if(count(*),1,0) from (select * from s_face limit 1) t
一句sql就能得到你的答案,为什么要用个存储过程
热心网友
时间:2022-05-07 20:11
问题不明确