MySQL передает строковый аргумент переменной в переменную хранимой процедуры - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть следующая хранимая процедура:

CREATE DEFINER=`sleuser`@`%` PROCEDURE `PCDD`(
in ProjectID int,
in MonthName varchar(50),
in ServiceCode varchar(50),
in ProjectName varchar(50)
)
BEGIN

SET @PCProjID = ProjectID;
SET @PCSN1 = "020." + ServiceCode + ".000";
SET @Month = MonthName;
SET @ImpCostID = ProjectName;
SET @ImpCostTask1 = "020." + ServiceCode + ".000";

SELECT 
project.project_id,
'FP' as Phase,
ImportCost.OriginalCommitments,
ImportCost.ApprovedCommitmentChanges,
sum(RegisteredChangeOrders) + sum(OriginalContractPrice) as CurrentAssigned, 
sum(ProjectCostBudget.PendingChangeOrders) as PendingScopeChanges,

FROM `RCLY-DEV`.ProjectCostBudget

inner join project on project.project_id = 
ProjectCostBudget.ProjectID
inner join ImportCost on ImportCost.ProjectID = project.pmis
where ImportCost.ProjectID = @ImpCostID and 
ImportCost.Task = @PCSN1  and  
ProjectCostBudget.ProjectID = @PCProjID and 
ProjectCostBudget.ServiceNumber = @ImpCostTask1

который я звоню используя:

call PCDD(2,'September%2018','0000','RLCY-BB-01')

Где «0000» должно изменяться от «0000» до «6000». Когда я запускаю SP для «0000», он возвращает ожидаемые результаты, но когда я изменяю его на что-то еще, он просто возвращает все нули. Я попытался обновить @ PCSN1 и @ ImpCostTask1 до:

SET @PCSN1 = ("020.", ServiceCode, ".000");
SET @ImpCostTask1 = ("020.", ServiceCode, ".000");

Но я получаю ошибку

"Операнд должен содержать 1 столбец (столбцы).

Что я здесь не так делаю? Почему он работает для одного ServiceCode, а не для других?

1 Ответ

0 голосов
/ 07 сентября 2018

Вам нужно использовать ' enqoute string literal и CONCAT вместо '+' для объединения строк:

SET @PCSN1 = "020." + ServiceCode + ".000";
=>
SET @PCSN1 = CONCAT('020.', ServiceCode, '.000');

То же для:

SET @ImpCostTask1 = "020." + ServiceCode + ".000";
=>
SET @ImpCostTask1  = CONCAT('020.', ServiceCode, '.000');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...