MySQL存储过程中能不能用IF exists(SELECT * from form__rmms_pofm_fundsmanage) THEN ...END
来检验表是否存在来检验表是否存在,这样写是不对的,如有,请提供我正确的写法如没有,请问有没有其他写法,能百度出来的blog,我都试过了,不要贴没有验证过的blog。MyS...
来检验表是否存在来检验表是否存在,这样写是不对的,如有,请提供我正确的写法如没有,请问有没有其他写法,能百度出来的blog,我都试过了,不要贴没有验证过的blog。MySQL5.5
具体存储过程如下:if exists()那句出错。
delimiter //
DROP PROCEDURE IF EXISTS refreshData;
CREATE PROCEDURE refreshData()
BEGIN
DECLARE station_temp VARCHAR(150);
declare tmp varchar(20) default NULL ;
DECLARE my_cursor CURSOR FOR select station from uisp_lw_100000.form__base_mechanismset_mechanisminfo;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmp = NULL; -- while 循环写法,其他循环体写法不同
OPEN my_cursor;
FETCH my_cursor INTO tmp;
while (tmp IS NOT NULL) do
-- SELECT tmp;
set @dbname="uisp_lw_"+tmp;
select @dbname;
set @insert_sql = CONCAT("insert into form__rmms_pofm_fundsmanage SELECT * from uisp_lw_",tmp,".form__rmms_pofm_fundsmanage") ;
IF exists(SELECT * from uisp_lw_100000.form__rmms_pofm_fundsmanage) THEN
prepare stmt from @insert_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
FETCH my_cursor INTO tmp;
end while;
CLOSE my_cursor;
END //
delimiter ;
call refreshData(); 展开
具体存储过程如下:if exists()那句出错。
delimiter //
DROP PROCEDURE IF EXISTS refreshData;
CREATE PROCEDURE refreshData()
BEGIN
DECLARE station_temp VARCHAR(150);
declare tmp varchar(20) default NULL ;
DECLARE my_cursor CURSOR FOR select station from uisp_lw_100000.form__base_mechanismset_mechanisminfo;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmp = NULL; -- while 循环写法,其他循环体写法不同
OPEN my_cursor;
FETCH my_cursor INTO tmp;
while (tmp IS NOT NULL) do
-- SELECT tmp;
set @dbname="uisp_lw_"+tmp;
select @dbname;
set @insert_sql = CONCAT("insert into form__rmms_pofm_fundsmanage SELECT * from uisp_lw_",tmp,".form__rmms_pofm_fundsmanage") ;
IF exists(SELECT * from uisp_lw_100000.form__rmms_pofm_fundsmanage) THEN
prepare stmt from @insert_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
FETCH my_cursor INTO tmp;
end while;
CLOSE my_cursor;
END //
delimiter ;
call refreshData(); 展开
2个回答
展开全部
你这个if是要判断uisp_lw_100000表空间里是不是存在表form__rmms_pofm_fundsmanage。
你这样判断如果是不存在就直接报错了。所以就不能运行通过。
你在上边再声明一个变量tb_name用来存放你要找的这个表名。
select table_name into tb_name from information_schema.tables where table_schema='uisp_lw_100000' AND TABLE_NAME='form__rmms_pofm_fundsmanage';
这样你判断tb_name是不是空就行了。判断跟你的while跳出的判断一样。
你这样判断如果是不存在就直接报错了。所以就不能运行通过。
你在上边再声明一个变量tb_name用来存放你要找的这个表名。
select table_name into tb_name from information_schema.tables where table_schema='uisp_lw_100000' AND TABLE_NAME='form__rmms_pofm_fundsmanage';
这样你判断tb_name是不是空就行了。判断跟你的while跳出的判断一样。
2015-04-10
展开全部
SELECT没有IF EXISTS 语法,你可以用select count(*) from information_schema.tables where table_schema='your_schema' and table_name='your_tab';看返回0还是1来判断。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询