MYSQL的一个奇怪问题

来源:百度知道 编辑:UC知道 时间:2024/09/23 18:20:09
先看语句:
DROP PROCEDURE IF EXISTS isuser;
CREATE PROCEDURE isuser(usr char(18))
IF (SELECT id FROM zo_user WHERE user=usr)>0 THEN
SELECT 1;
ELSE
SELECT 0;
END IF;

错误提示:
#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 3

测试时发现下面的语句也是同样的错误提示:
DROP PROCEDURE IF EXISTS isuser;
CREATE PROCEDURE isuser(usr char(18))
BEGIN
SELECT 1;
SELECT 0;
END;
回xyxy1324:不是那个问题,那个我也试过,不行的
你看下第二条,也是一样的错误提示。测试发现用简单句时就可以,用复合句(begin..end)或者其它复杂一点的就不行。
但是手册上明明有这些语法的。

回gzz_gzz:
版本信息:MySQL - 5.0.19-nt

回nomanland:
#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 2

支持存储过程是肯定的,比如:
CREATE PROCEDURE p()
SELECT 1;
这个是可以正常执行的,就是稍复

虽然不太懂这个语法
你看是不是这一行
IF (SELECT id FROM zo_user WHERE user=usr)>0 THEN

改成-->
IF ((SELECT id FROM zo_user WHERE user=usr)>0) THEN

加个括号~
反正报错就说你语法错误...
如果你认为语法实在没错,那就是电脑的错~~~呵呵

那你看看你第2行是不是少个分号?
呵呵,我真不懂这个,只会oracle...

MySQL 5.0 才有 存储过程、触发器、视图、信息架构视图.

如果版本低于5。0肯定不行呀。

等我装一个5.0试一下
我机器里的现在是4.1

楼上打广告是骗人的大家别上当

这样呢?错误提示是什么
CREATE PROCEDURE p()
BEGIN
SELECT 1;
SELECT 0;
END;

也就是说第二个语句中 去掉 begin end 之间的语句就行的通的?
对存储过程不是很懂 而且我会的也是oracle, oracle立一般参数是要说明in or out 然后去掉 drop用 CREATE OR REPLACE PROCEDURE 试试 begin..end之间先用简单的一句语句试试

这样写是有问题的,应该是先判断是否存在这个存储过程,然后再对存在的存储过程进行删除,呵呵,希望能有帮助,^_^