环境:Windows Server 2003 Enterprise Edition
PHPnow 1.4.4(内置phpMyAdmin - 2.11.4和MySQL-5.0.51a)
我还不怎么熟悉MySql,我搜了论坛的相关帖子,问题依旧。望各位大神不吝赐教 !以下代码在phpMyAdmin中运行出错。    
create procedure wf_getjournalname(in u_name varchar(32),out v_re varchar(255))
BEGIN
declare cra cursor for select setting_value from journal_settings;
OPEN cra;
FETCH NEXT from cra into @v_re;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT from cra into @v_re;
END;
close cra;
deallocate cra;
end
  错误
SQL 查询:  CREATE PROCEDURE wf_getjournalname( IN u_name varchar( 32 ) , out v_re varchar( 255 ) ) BEGIN declare cra cursor FOR SELECT setting_value
FROM journal_settings;OPEN cra;FETCH NEXT FROM cra INTO @v_re ;WHILE@ @FETCH_STATUS =0 BEGIN FETCH NEXT FROM cra INTO @v_re ;END ;close cra;deallocate cra;END MySQL 返回: #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 '@v_re;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT from cra into @v_re;
END;
' at line 5 

解决方案 »

  1.   

    delimiter $$
    create procedure wf_getjournalname(in u_name varchar(32),out v_re varchar(255))
    BEGIN
    declare cra cursor for select setting_value from journal_settings;
    OPEN cra;
    FETCH NEXT from cra into @v_re;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    FETCH NEXT from cra into @v_re;
    END;
    close cra;
    deallocate cra;    
    end $$
    delimiter ;
      

  2.   

    不行哦,错误还是:
    MySQL 返回: #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 '@v_re;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    FETCH NEXT from cra into @v_re;
    END;
    ' at line 5 
      

  3.   

    在你的phpMyAdmin中设置一下 delimiter, 否则phpMyAdmin看到;分号就提交了你的语句。
      

  4.   

    在你的phpMyAdmin中设置一下 delimiter, 否则phpMyAdmin看到;分号就提交了你的语句。在你的 phpMyAdmin  界面上,在SQL查询框下有一个 文本框DELIMITER来设置。你可以设置为 //
    然后
    create procedure wf_getjournalname(in u_name varchar(32),out v_re varchar(255))
    BEGIN
    declare cra cursor for select setting_value from journal_settings;
    OPEN cra;
    FETCH NEXT from cra into @v_re;
    WHILE @@FETCH_STATUS = 0
    BEGIN
    FETCH NEXT from cra into @v_re;
    END;
    close cra;
    deallocate cra;    
    end    
    //
      

  5.   

    你们的回复都是对的。版主还讲了些原理。
    总结:在phpnow里面设置mysql会有意想不到的问题。因为phpnow 自己就弄了很多预设。感觉它们对存储过程的兼容性不太好。
    在这个版本中,使用while貌似就得跟着do,不然就出错。。我设置了delimiter,把“begin”改成“do”,把“end”改成“end while”才能运行了。。
      

  6.   

    你们的回复都是对的。版主还讲了些原理。
    总结:在phpnow里面设置mysql会有意想不到的问题。因为phpnow 自己就弄了很多预设。感觉它们对存储过程的兼容性不太好。
    在这个版本中,使用while貌似就得跟着do,不然就出错。。我设置了delimiter,把“begin”改成“do”,把“end”改成“end while”才能运行了。。