2016-11-10 1 views
0

Wenn ich die gespeicherte Prozedur in Listen von Daten als Eingabe vorbei rufen:wie Werte mit entsprechender Aktualisierungstabelle passiert in 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” 

Es sollte die Tabelle „Name1“, wie unten in einem Aufruf zu SP genannt aktualisieren

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 

ich habe den oben SP versucht, aber seine Aktualisierung nur eine Zeile auf time.So kann jemand bitte helfen Sie mir, dieses Problem zu lösen.

Antwort

0

Versuchen unter Bedingung ersetzt in where-Klausel

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

Hoffnung dies Ihr Problem lösen soll.

Dies wird mehrere Datensätze aktualisieren. Aber aktualisiert 'Comments1;comm2;comm3' zu allen drei IDs.

Wenn Sie wie aktualisieren unter

id comm 
1 Comments1 
2 comm2 
3 comm3 

Dann wird das nicht funktionieren.

In diesem Fall können Sie unter 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 

HINWEIS folgen: Dieser SP nur ein Beispiel ist, das Ihr Szenario implementiert, mit zu beginnen. Verbessere es, wenn du Probleme hast.

+0

Ich will als – Chowdary

+0

id comm 1 Kommentare1 2 comm2 3 KOMM3 – Chowdary

+0

Ich will nicht aktualisieren, um aktualisiert ‚Kommentare1; comm2; KOMM3‘ zu allen drei ids – Chowdary

Verwandte Themen