1
    CREATE DEFINER=`root`@`localhost` PROCEDURE `add_item`(
       IN parentId BIGINT UNSIGNED, IN jobId BIGINT UNSIGNED,
       OUT id BIGINT UNSIGNED)
    BEGIN
       DECLARE newLeft INT UNSIGNED DEFAULT 0;

       SELECT `RGT` into newLeft from `headings` where `ID`=parentId LIMIT 1;

       /* ERROR TRAP */
       IF (newLeft=0) OR (newLeft=NULL) THEN SET newLeft=1;
       END IF;

Problem is I can't select the result into the local variable newLeft, it always equals 1 (or 0 if I remove the error trap). Am I missing something? I have tried so many different approaches, even putting the "INTO newLeft" at the end of the SELECT statement.

Using MYSQL 5.4 on test machine which is Windows 7 using IIs

4

1 回答 1

0

解决方案:

MYSQL 将在使用存储过程中的表中的字段之前使用局部变量或参数,如果它们名称相同,并且不区分大小写。注意where ID=parentId部分,它实际上是在询问 where 0=parentId(此时变量 id=0),因为 ID 是一个局部参数,也是表中的一个字段,但是局部变量具有精确性。

将 OUT 参数名称从id更改为outid解决了该问题。

我想我可以将选择更改为:

SELECT `RGT` into newLeft from `headings` where `headings`.`ID`=parentId LIMIT 1;

我没有尝试这个,我只是更改了 OUT 参数名称。

于 2013-04-17T08:57:25.020 回答