MySQL 存储过程:将列选择结果存入 OUT 参数

3

我有一个类似于以下存储过程的程序,当我尝试保存它时,会出现以下错误:

未声明的变量: my_column

CREATE PROCEDURE p (OUT column_param VARCHAR(25))
BEGIN
    SELECT my_column INTO coumn_param limit 1;
END;

为什么我不能选择要返回的列?

这是我的存储过程中实际查询语句:

select latitude into lat, longitude into lon
from cities cc
inner join countries c on cc.country_id = c.country_id
inner join regions r on cc.region_id = r.region_id and c.country_id = r.country_id
left join locations l on cc.city_id = l.city_id
where 
city = coalesce(cty, city) and
country = coalesce(ctry, country) and
region = coalesce(reg, region)
limit 1;
1个回答

4

您的INTO子句语法不正确。

假设您的查询本身是正确且可用的,并且已经声明了latlon变量,请更改此部分。

select latitude into lat, longitude into lon

to

SELECT latitude, longitude INTO  lat, lon

这里是一个关于 SQLFiddle 的演示。


我不能使用预处理语句来完成这个任务,对吗? - Get Off My Lawn
1
@RyanNaddy 如果你指的是使用 PREPARE ... FROM ...EXECUTE ... USING,那么是的,你可以这样做,但需要使用用户/会话变量(例如 @lat),而不是没有 @ 的本地变量。 - peterm
好的,我做了这个(作为预处理语句):SELECT latitude, longitude INTO @lat, @lon .... 然后这个(作为普通语句):select @lat, @lon into lat, lon; - Get Off My Lawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接