小弟对Mysql存储过程语法不太熟悉,以下存储过程在调整过后执行仍不成功,求各位大侠指点指点。。
create procedure prc_AddChannel
(
id  int,
iname varchar(50),
isdisplay int,
descriptions varchar(100),
demo varchar(100)
)
begin   
declare myRight int;
declare pro int;
SELECT Right_Value into myRight FROM CHANNEL WHERE CHANNEL_ID=id;
SELECT count(*)  into pro FROM CHANNEL WHERE PARENT_ID=id;
UPdate CHANNEL SET HAS_CHILD = 1 WHERE CHANNEL_ID=id;
UPdate CHANNEL SET RIGHT_VALUE = RIGHT_VALUE+2 WHERE RIGHT_VALUE>=myRight;
UPdate CHANNEL SET LEFT_VALUE = LEFT_VALUE+2 WHERE LEFT_VALUE>myRight;
INSERT INTO CHANNEL(PARENT_ID,TITLE,CREATE_TIME,Left_Value,Right_Value,HAS_CHILD,PRORITY,Is_Display,Description,Demo) VALUES (id,iname,now(),myRight,myRight + 1,0,pro+1,isdisplay,descriptions,demo);
end; create procedure prc_DelChannel(id int) 
begin   
declare myRight int ;
declare myLeft int ;
declare myWidth int ;
SELECT Right_Value into myRight FROM CHANNEL WHERE CHANNEL_ID = id;
SELECT LEFT_VALUE into myLeft FROM CHANNEL WHERE CHANNEL_ID = id;
SELECT Right_Value - LEFT_VALUE + 1 into myWidth FROM CHANNEL WHERE CHANNEL_ID = id;
DELETE FROM CHANNEL WHERE LEFT_VALUE BETWEEN myLeft AND myRight;
UPdate CHANNEL SET Right_Value = Right_Value - myWidth WHERE Right_Value > myRight;
UPdate CHANNEL SET LEFT_VALUE = LEFT_VALUE - myWidth WHERE LEFT_VALUE > myRight;
end;

解决方案 »

  1.   

    错误信息是什么? 是无法创建存储过程还是执行存储过程时出错?
    你可以参考一下手册中的语法。
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  2.   

    错误信息好多...
    错误码: 1327
    Undeclared variable: myRight
    错误码: 1327
    Undeclared variable: pro
    错误码: 1054
    Unknown column 'id' in 'where clause'
    错误码: 1054
    Unknown column 'myRight' in 'where clause'
    错误码: 1054
    Unknown column 'id' in 'field list'
    错误码: 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 'end' at line 1
    我看蒙了。。不知道怎么解决哇
      

  3.   

    为什么一执行就一堆错误信息呀....郁闷
    --创建栏目表
    create table CHANNEL
    (
     CHANNEL_ID int AUTO_INCREMENT primary key not null,
     PARENT_ID int references CHANNEL(CHANNEL_ID),
     TITLE varchar(100) not null,
     CREATE_TIME datetime,
     LEFT_VALUE int,
     RIGHT_VALUE int,
     HAS_CHILD int,
     PRORITY int,
     IS_DISPLAY int ,
     DESCRIPTION varchar(100),
     DEMO varchar(100)
    )
    这个是栏目表结构,麻烦大侠们帮忙测试下能否执行成功
      

  4.   

    生成数据的INSERT语句呢?下午来测试一下
      

  5.   

    现在只有一条数据 根栏目数据
    insert into CHANNEL(PARENT_ID,TITLE,CREATE_TIME,LEFT_VALUE,RIGHT_VALUE,HAS_CHILD,IS_DISPLAY) values(null,'资讯中心',now(),1,2,1,0)
      

  6.   

    你的这个建表语句没有问题。建议你也类似下面一样贴出你的运行结果。使用MYSQL命令行工具。mysql> create table CHANNEL
        -> (
        ->   CHANNEL_ID int AUTO_INCREMENT primary key not null,
        ->   PARENT_ID int references CHANNEL(CHANNEL_ID),
        ->   TITLE varchar(100) not null,
        ->   CREATE_TIME datetime,
        ->   LEFT_VALUE int,
        ->   RIGHT_VALUE int,
        ->   HAS_CHILD int,
        ->   PRORITY int,
        ->   IS_DISPLAY int ,
        ->   DESCRIPTION varchar(100),
        ->   DEMO varchar(100)
        -> );
    Query OK, 0 rows affected (0.16 sec)mysql>
      

  7.   

    这个我用的是SQLyog连接Mysql数据库 以上的存储过程在那个里面不能执行成功,错误信息如3楼
      

  8.   

    那就行用行命令工具,不要用SQLYOG。
      

  9.   

    用你的SP及建表语句测试
    CALL prc_DelChannel(5);
    没有问题
      

  10.   

    那个我在SQLYOG中执行报错,会是什么原因呀?
      

  11.   


    delimtier //
    create procedure ..
    being
    ...
    end
    //
    delimiter ;
      

  12.   

    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  13.   

    我在SQLYOG、MYSQL命令行下测试,没有问题