Используя sp с переменной out, получите следующее сообщение об ошибке: Код ошибки: 1241. Операнд должен содержать 1 столбец - PullRequest
0 голосов
/ 24 августа 2018

Я написал хранимую процедуру в 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 столбец (столбцы)

1 Ответ

0 голосов
/ 24 августа 2018

Вам необходимо вернуть одно значение:

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)

EDIT:

что мне делать, если я хочу вернуть всю выбранную отправку

CREATE DEFINER=`root`@`localhost` PROCEDURE `storedp2`()
begin
  -- some logic
  SELECT * FROM myblog.computed;
end

call storedp2 ();

DBFiddle Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...