我在MySql中编写了一个包含out变量的存储过程,但是当我想调用它时,我收到以下错误。有人可以帮助我了解我做错了什么吗? 这是sp:
CREATE DEFINER=`root`@`localhost` PROCEDURE `storedp2`(out shift nvarchar(40))
begin
set shift= (SELECT * FROM myblog.computed);
end
我是这样称呼它的:
set @test='';
call storedp2 (@test) ;
select @test as t;
这是错误:
错误代码:1241。操作数应包含 1 列
您需要返回单个值:
CREATE DEFINER=`root`@`localhost` PROCEDURE `storedp2`(out shift nvarchar(40))
begin
set shift= (SELECT col_name FROM myblog.computed WHERE id = ?);
-- (single column/single row)
-- set shift = (SELECT col_name FROM myblog.computed WHERE ... LIMIT 1);
end;
不能将SELECT * FROM tab
的结果分配给NVARCHAR(40)
:
scalar := (col1, col2, col3) -- won't work (multiple cols, single row)
scalar := (col1, col2), (col1, col2) -- won't work (multiple cols, multiple rows)
sclara := (col1), (col1) -- won't work (single col, multiple rows)
编辑:
如果我想返回整个选择句子,我该怎么办
CREATE DEFINER=`root`@`localhost` PROCEDURE `storedp2`()
begin
-- some logic
SELECT * FROM myblog.computed;
end
call storedp2 ();
DBFiddle 演示