MySQL过程和clear同一语句返回不同的值

MySQL过程和clear同一语句返回不同的值,mysql,stored-procedures,Mysql,Stored Procedures,我在MySQL中做了一个简单的过程,如下所示: CREATE PROCEDURE `findId` (IN adr varchar(45), out id int) BEGIN set @id := (select id from `stocker` where adresa = adr); END 此外,我还进行了如下相同的程序: CREATE PROCEDURE `findId` (IN adr varchar(45), out id int) BEGIN (sel

我在MySQL中做了一个简单的过程,如下所示:

CREATE PROCEDURE `findId` (IN adr varchar(45), out id int)
BEGIN
    set @id := (select id from `stocker` where adresa = adr);
END
此外,我还进行了如下相同的程序:

    CREATE PROCEDURE `findId` (IN adr varchar(45), out id int)
BEGIN
    (select id from `stocker` where adresa = adr) into id;
END
在我用MySQL调用它之后,OUT参数的值是null。。。 我用明确的陈述来检验这一点:

set @idd := (select id from `stocker` where adresa = "Some street");
select @idd;
我把这个过程称为:

set @id = 0;
call stock.pronadjiId("Gajibina 6", @id);
select @id;

你能帮我理解一下,我哪里出错了吗?

检查参数名和列名。在同一查询中,id既是参数名又是列名

与其使用用户定义的变量和OUT参数从过程中返回值,不如只返回带有该值的结果集

CREATE PROCEDURE `findId` (IN in_adr varchar(45))
BEGIN
select id from `stocker` where adresa = in_adr;
END

使用SET id=从stocker中选择id,其中adresa=adr@Gareth这也有同样的问题这行吗?设置id=从stocker中选择s.id作为s,其中s.adresa=adr;如果是这样的话,我认为问题在于您在select查询中对id的引用在列id和参数id之间是不明确的,通过引入别名,您消除了这种不明确性,并且您知道您正在使用列引用。这对我来说似乎确实起到了预期的作用:@GarethD是的,就是这样。非常感谢。比我在程序中有更复杂的代码。我想在代码中发送变量,在过程调用之后,我必须在变量中输入值。