代码之家  ›  专栏  ›  技术社区  ›  Exception e

mysql是否在存储过程中对sql强制执行特殊的语法约束(选择进入问题)[已关闭]

  •  -1
  • Exception e  · 技术社区  · 16 年前

    update..set子句给出了一些问题


    我更简化了代码。问题依然存在。错误消息似乎隆隆作响


    多亏了马克·拜尔斯,问题解决了。这个 into select -声明必须仔细定位。注意mysql错误mesage是多么误导和糟糕!

    错误1064(42000):您的SQL语法有错误;检查手册

       UPDATE page
       SET
       lft = 1
       where lft > 3 AN' at line 22
    

    CREATE PROCEDURE `move_page_right`( subject_id SMALLINT UNSIGNED, reference_id SMALLINT UNSIGNED)
    
    
    BEGIN 
        select 
            p.lft, 
            p.rgt, 
            p.rgt - p.lft,
            p.rgt + 1 
        into 
            @subject_old_lft, 
            @subject_old_rgt, 
            @subject_width, 
            @subject_old_right_sibling_lft 
        from page p 
        where p.page_id = subject_id; 
    
    
        select p.rgt + 1 
        from page p 
        into @subject_new_lft 
        where p.page_id = reference_id;
    
    UPDATE page 
    SET 
    lft = 1 
    where lft > 3 AND lft < 3;
    
    END
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Mark Byers    16 年前

    对不起,我只是在猜测,但希望我能很快得到它。。。从 documentation for SELECT

    SELECT
        select_expr
        FROM table_references
        WHERE where_condition
        INTO var_name
    

    我强烈怀疑这些条款的顺序是重要的。在您的查询中,您混淆了顺序,我认为这可能会带来问题,尽管错误消息具有误导性。

        select p.rgt + 1 
        from page p 
        into @subject_new_lft 
        where p.page_id = reference_id;
    

    这里的输入和输出也是相反的:

        select 
                p.lft, 
                p.rgt, 
                p.rgt - p.lft,
                p.rgt + 1 
        into 
                @subject_old_lft, 
                @subject_old_rgt, 
                @subject_width, 
                @subject_old_right_sibling_lft 
        from page p 
        where p.page_id = subject_id; 
    

    试着改变一下,看看是否有帮助。

        2
  •  1
  •   Tom H zenazn    16 年前

    我认为表别名不在更新部分。尝试删除别名。如果UPDATE语句引用多个表,则可以将更新后的表放入FROM子句(或任何join)中,并在UPDATE部分中仅使用别名。

    我不知道MySQL,但这就是它在MS SQL中的工作原理,所以它可能是ANSI标准。

    我也不确定你想要完成什么。您将列设置为它们自己,这不会起任何作用。

    推荐文章