在MySQL5.0中船舰存储过程通不过,提示:
[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 54实在找不出哪里错了,请高手指点一下代码如下:CREATE DEFINER=`root`@`localhost` PROCEDURE `forum_register`(
 in email varchar(30),
 in password varchar(16),
 in userName char(8),
 in qq char(10),
in securityQuestion1 varchar(40),
in securityQuestion2 varchar(40),
in securityAnswer1 varchar(40),
in securityAnswer2 varchar(40),
in headPicture blob,
in registerTime datetime,
in participatedTopicsCount int,
in createdTopicsCount int,
in managingSectionID smallint,
in currentUploadSize float,
in state char(1)
)
begin
insert into forum_users(
用户名,
邮箱,
参与主题数,
发起主题数,
密码,
QQ,
头像,
注册时间,
密保问题1,
密保答案1,
密保问题2,
密保答案2,
管理版块ID,
当前上传容量,
状态
)
values(
userName,
email ,
participatedTopicsCount ,
createdTopicsCount,
password,
qq,
headPicture ,
registerTime,
securityQuestion1,
securityAnswer1 ,
securityQuestion2 ,
securityAnswer2,
managingSectionID,
currentUploadSize,
state
);
SELECT   LAST_INSERT_ID();
end

解决方案 »

  1.   


    delimiter //
    CREATE DEFINER=`root`@`localhost` PROCEDURE `forum_register`(
         in email varchar(30),
         in password varchar(16),    
         in userName char(8),
         in qq char(10),
        in securityQuestion1 varchar(40),    
        in securityQuestion2 varchar(40),
        in securityAnswer1 varchar(40),
        in securityAnswer2 varchar(40),
        in headPicture blob,
        in registerTime datetime,
        in participatedTopicsCount int,
        in createdTopicsCount int,    
        in managingSectionID smallint,    
        in currentUploadSize float,    
        in state char(1)
    )
    begin
        insert into forum_users(
            用户名,
            邮箱,
            参与主题数,
            发起主题数,
            密码,
            QQ,
            头像,
            注册时间,
            密保问题1,
            密保答案1,
            密保问题2,
            密保答案2,
            管理版块ID,
            当前上传容量,
            状态
        )  values(
            userName,
            email ,
            participatedTopicsCount ,
            createdTopicsCount,
            password,
            qq,
            headPicture ,
            registerTime,
            securityQuestion1,            
            securityAnswer1 ,
            securityQuestion2 ,    
            securityAnswer2,
            managingSectionID,
            currentUploadSize,
            state
        );
        SELECT   LAST_INSERT_ID();
    end
    //
      

  2.   

    是否是你的字符集设置的问题? set names gb2312 一下。mysql> set names 'gb2312';
    Query OK, 0 rows affected (0.06 sec)mysql> delimiter //
    mysql> CREATE PROCEDURE `forum_register`(
        ->      in email varchar(30),
        ->      in password varchar(16),
        ->      in userName char(8),
        ->      in qq char(10),
        ->     in securityQuestion1 varchar(40),
        ->     in securityQuestion2 varchar(40),
        ->     in securityAnswer1 varchar(40),
        ->     in securityAnswer2 varchar(40),
        ->     in headPicture blob,
        ->     in registerTime datetime,
        ->     in participatedTopicsCount int,
        ->     in createdTopicsCount int,
        ->     in managingSectionID smallint,
        ->     in currentUploadSize float,
        ->     in state char(1)
        -> )
        -> begin
        ->     insert into forum_users(
        ->         用户名,
        ->         邮箱,
        ->         参与主题数,
        ->         发起主题数,
        ->         密码,
        ->         QQ,
        ->         头像,
        ->         注册时间,
        ->         密保问题1,
        ->         密保答案1,
        ->         密保问题2,
        ->         密保答案2,
        ->         管理版块ID,
        ->         当前上传容量,
        ->         状态
        ->
        ->
        ->     )
        ->     values(
        ->         userName,
        ->         email ,
        ->         participatedTopicsCount ,
        ->         createdTopicsCount,
        ->         password,
        ->         qq,
        ->         headPicture ,
        ->         registerTime,
        ->         securityQuestion1,
        ->         securityAnswer1 ,
        ->         securityQuestion2 ,
        ->         securityAnswer2,
        ->         managingSectionID,
        ->         currentUploadSize,
        ->         state
        ->     );
        ->     SELECT   LAST_INSERT_ID();
        -> end
        -> //
    Query OK, 0 rows affected (0.34 sec)mysql> delimiter ;
    mysql>
      

  3.   

    加了换界符后存储过程可以创建成功,Navicat中执行下面的SQL语句也能成功,数据也进去了,
    call forum_register('1','2','3','463127310','1','1','2','2',null,'2009-010-05 15:25:00',0,0,null,1024,'0');
    但在命令行就是不行,提示:
    ERROR 1457 (HY000): Failed to load routine aiforumdb.forum_register.The table mysql.proc is missing, corrupt, or contains bad data(internal code -6)
    mysql>

    顺便问句,怎么把mysql命令行的内容复制下来,我用鼠标右键【标记】了然后选中要复制的内容,按Ctrl+c,然后粘贴的数据总是从只有一半(从中间分开左面的)?
      

  4.   

    而且在程序中调用出现如下异常
    com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: FUNCTION forum_register does not exist
    会什么会出现找不到存储过程呢?
      

  5.   

    命令行中复制:只要选中要复制的文本,按回车就可以。
    怎么提示错误信息时function?你是怎么调用的?
    检查一下mysql数据库中有没有proc表。
      

  6.   

    我是这样调用的:callableStatement=con.prepareCall(cmdstr);
    callableStatement.executeQuery();mysql中有proc表,而且forum_register也在里面
      

  7.   

    1。职java 中你用的登录用户是什么?
    2。 是在同一客户机上登录吗? (从不同的IP联MYSQL会有不同的权限)
    3。你的java connector 的版本是否兼容?
      

  8.   

    我用的MySQl5.0,connector也是5.0的,用root用户登录,本地机登录,执行insert 语句都是可以的,不知哪个地方用的不对,还是什么地方配置有问题,或是MySQL的支持问题。
      

  9.   

    应该是驱动的加载问题吧 你用的什么驱动用mysql知道的driver试试
      

  10.   

    谢谢各位热心的帮助,不过可能是MySQL有问题了吧,我今天把MySQL重装了,以前是5.0的,现在换成了5.1的,存储过程调用没问题了。