2016-11-10 23 views
0

當我調用存儲過程中的數據的列表傳遞作爲輸入:如何通過與相應的更新表中的值在MySQL

IN pk VARCHAR(MAX) = 「11;12;13」 
IN forenam varchar(MAX)= 「Test1;Test2;Test3」 
IN surnam varchar(MAX) = 「Tst1;Tst2;Tst3」 
IN bdate varchar(MAX) = 「2016-01-02; 2016-01-04; 2016-01-03」 
IN comm varchar(MAX) = 「Comments1;comm2;comm3」 
IN table_nam varchar(MAX)= 「Name1」 

它應該更新在一個呼叫到SP名爲「NAME1」作爲如下表

PK forename surname bdate comments 
11 Test1 Tst1 2016-01-02 Comments1 
12 Test2 Tst2 2016-01-04 comm2 
13 Test3 Tst3 2016-01-03 comm3` 





CREATE DEFINER=`username`@`%` PROCEDURE `SP_UKFLMM_Update_multitable`(
IN pk int, 
IN forenam varchar(255), 
IN surnam varchar(255), IN bdate datetime, 
IN comm varchar(1000), 
IN table_nam varchar(255)) 
BEGIN 

if table_nam in ('UK_FLMM_demandData','UK_FLMM_Completed_demandData') 
then 
UPDATE table_nam set forename=forenam,surname=surnam,birthDate=bdate,comments=comm where id=pk; 

else if table_nam = 'UK_FLMM_sequenceData' then 

UPDATE table_nam set comments=comm where id=pk; 

end if; 
end if; 


END$$ 

DELIMITER 

我已經嘗試了上述SP,但其更新在time.So只有一行任何人都可以請幫我理清這個問題。

回答

0

嘗試更換以下條件在where子句

WHERE LOCATE(REPLACE(id,';',','),pk) > 0; 

希望這應該解決您的問題。

這將更新多個記錄。但將更新'Comments1;comm2;comm3'所有三個ID。

如果您需要更新像下面

id comm 
1 Comments1 
2 comm2 
3 comm3 

,那麼這將無法正常工作。

在這種情況下,你可以按照下面SP

CREATE DEFINER=`username`@`%` PROCEDURE `SP_UKFLMM_Update_multitable`(
IN pk int, 
IN forenam varchar(255), 
IN surnam varchar(255), IN bdate datetime, 
IN comm varchar(1000), 
IN table_nam varchar(255)) 
BEGIN 

    DECLARE loopIncrement INT; 
    DECLARE loopLimit INT; 
    DECLARE nPK INT; 
    DECLARE nForeName varchar(255); 
    DECLARE nSurName varchar(255); 
    DECLARE nBDate datetime; 
    DECLARE nComm varchar(1000); 

    SET loopLimit := 0; 
    SET loopIncrement := 0; 

    SET loopLimit := (LENGTH(pk) - LENGTH(REPLACE(pk,";",""))) + 1; 

WHILE loopIncrement < loopLimit DO 
    IF(loopIncrement = loopLimit - 1) THEN 
     SET nPK := SUBSTRING_INDEX(pk,';',-1); 
     SET nForeName := SUBSTRING_INDEX(forenam,';',-1); 
     SET nSurName := SUBSTRING_INDEX(surnam,';',-1); 
     SET nComm := SUBSTRING_INDEX(comm,';',-1); 
     SET nBDate := SUBSTRING_INDEX(bdate,';',-1); 
    ELSE  
     SET nPK := SUBSTRING_INDEX(pk,';',loopIncrement+1); 
     SET nForeName := SUBSTRING_INDEX(forenam,';',loopIncrement+1); 
     SET nSurName := SUBSTRING_INDEX(surnam,';',loopIncrement+1); 
     SET nComm := SUBSTRING_INDEX(comm,';',loopIncrement+1); 
     SET nBDate := SUBSTRING_INDEX(bdate,';',loopIncrement+1); 
    END IF; 

    if table_nam in ('UK_FLMM_demandData','UK_FLMM_Completed_demandData') 
    then 
    UPDATE table_nam set forename=nForeName,surname=nSurName,birthDate=nBDate,comments=nComm where id=nPK; 

    else if table_nam = 'UK_FLMM_sequenceData' then 

    UPDATE table_nam set comments=nComm where id=nPK; 

    loopIncrement++; 

end if; 
end if; 

END WHILE; 


END$$ 

DELIMITER 

注意:這僅僅是它實現您的方案得到開始與樣品SP。如果您遇到任何問題,請改善它。

+0

我想更新爲 – Chowdary

+0

ID COMM 1 Comments1 2 COMM2 3 comm3 – Chowdary

+0

我不想將更新「Comments1; COMM2; comm3」到所有的三個ID – Chowdary

相關問題