मेरे पास निम्न संग्रहीत प्रक्रिया है:

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' में बदलने की जरूरत है। जब मैं '0000' के लिए एसपी चलाता हूं तो यह अपेक्षित परिणाम देता है, लेकिन जब मैं इसे किसी और चीज़ में बदलता हूं तो यह सभी शून्य देता है। मैंने @PCSN1 और @ImpCostTask1 को अपडेट करने का प्रयास किया:

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

लेकिन मुझे त्रुटि मिलती है

"संचालन में 1 कॉलम होना चाहिए।

मुझसे यहां क्या गलत हो रहा है? यह एक सर्विसकोड के लिए क्यों काम करता है लेकिन दूसरे के लिए नहीं?

1
DBA108642 7 सितंबर 2018, 17:12

1 उत्तर

सबसे बढ़िया उत्तर

आपको स्ट्रिंग संयोजन के लिए '+' के बजाय ' enqoute string शाब्दिक और CONCAT का उपयोग करने की आवश्यकता है:

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

इसके लिए समान:

SET @ImpCostTask1 = "020." + ServiceCode + ".000";
=>
SET @ImpCostTask1  = CONCAT('020.', ServiceCode, '.000');
2
Lukasz Szozda 7 सितंबर 2018, 17:18