Mysql的if exists语法问题

叶落花开 发布于 2012/07/19 10:25
阅读 15K+
收藏 0
我在mysql的存储过程里这么写,
CREATE PROCEDURE TEMP ()
BEGIN 
	declare V_RETUR int;
	IF EXISTS(SELECT 1 FROM dual where 1=1) then
            IF 1=1 then
	        select  V_RETURN = 1;
            END if;
 	END if;
END;

执行报错。

[Err] 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 '' at line 8

如果把if exists里边嵌套的if块去掉就没问题:

CREATE PROCEDURE TEMP ()
BEGIN 
	declare V_RETURN int;
	IF EXISTS(SELECT 1 FROM dual where 1=1) then
	    select  V_RETURN = 1;
 	END if;
END;

 

难道是mysql里,If exists块里不能再嵌套if 语句?Google了下,没搜到相关问题。

@红薯  求帮助...

加载中
0
Z
ZYud

delimiter //

CREATE PROCEDURE TEMP ()
BEGIN
    declare V_RETUR int;
    begin
    IF EXISTS(SELECT 1 FROM dual where 1=1) then
            IF 1=1 then
            set V_RETUR = 1;
        select V_RETUR;
            END if;
     END if;
    end;
END//

delimiter ;

call temp()

阿尼玛啊阿尼玛
阿尼玛啊阿尼玛
回复 @叶落花开 : 将sql 的分隔符号从;变为// 这样就不会你在输入存储过程的过程中,一输入; mysql就把前面的执行了呀。改变后,只有等到//才会执行。等写完存储过程,再将分隔符换回;~~
叶落花开
叶落花开
回复 @ZYud : 恩,谢谢指导!
Z
ZYud
回复 @叶落花开 : 可以参考mysql创建trigger,PROCEDURE的文档.当一个PROCEDURE中包括多个语句时为了区分PROCEDURE中的语句及PROCEDURE的结束符,需重新定义分隔符. 定义分隔符的命令时 delimiter 修改分隔符为// delimiter //
叶落花开
叶落花开
大恩不言谢啊
叶落花开
叶落花开
求解 干嘛要加 delimiter // 这个东西?
0
阿YANG
阿YANG
delimiter这写法学习了,留个脚印
0
八宝旗
八宝旗

不用delimiter,这个写法怎么会执行成功

1 CREATE PROCEDURE TEMP ()
2 BEGIN
3     declare V_RETURN int;
4     IF EXISTS(SELECT FROM dual where 1=1) then
5         select  V_RETURN = 1;
6     END if;
7 END;
返回顶部
顶部