2016-11-11 3 views
1

Ich habe eine Liste von int und Liste der Zeichenfolge in C#, wobei int Primärschlüssel und String ist Name.Wie update mehrere Zeilen mit unterschiedlichen wo Bedingung in Oracle

Für ex: {1,2}, { "Faust", "zweite"}

update table set name ="first" where id =1 
update table set name = "second" where id=2 

Ich brauche die Werte in Oracle unter Verwendung des Verfahrens zu aktualisieren.

Angenommen, ich habe Verfahren, wie mit der Liste als Array übergeben folgt

PROCEDURE update
(
ID IN VARCHAR,
Name IN VARCHAR
)
IS BEGIN
END update in varchar.

Was ist die Logik I ohne Verwendung von Case-Anweisung

+0

Was ist das Problem? weißt du nicht wie update mit ado.net? –

+0

Ich muss Bulk-Update in einem einzigen Verfahren –

+0

Sie sollten nicht einmal eine Prozedur dafür benötigen, es ist eine einfache SQL-Anweisung. (Aber das ist in ado.net getan, mit denen ich nicht vertraut bin.) – mathguy

Antwort

1

OK, vielleicht haben Sie eine Tabelle (deren Namen besser nicht sein „Tisch“!) Bedeuten sollte - sagen wir es Tabl genannt wird, mit mindestens zwei Spalten , ID und Name. Und Sie haben ein Wörterbuch, mit Spalten-ID und Namen (oder was auch immer andere Spaltennamen).

Dann - mit der merge Anweisung:

merge into tbl 
    using dictionary 
    on (tbl.id = dictionary.id) 
when matched then 
    update set name = dictionary.name 
; 

Sie könnten auch eine update Anweisung verwenden, aber wenn das Update aus einer anderen Tabelle liest, merge ist leichter zu lesen und zu pflegen, und manchmal kann es auch mehr sein effizient.

+1

Ich bin fast sicher Wörterbuch ist eine 'C#' Liste –

+0

@JuanCarlosOropeza - dann zeigt das OP (oder jemand mit Ado.net und C# - zu - Oracle vertraut) zeigen, wie die C# -Liste als eine Ansicht oder eine temporäre Tabelle "zu sehen" . – mathguy

+0

@NicholasKrasnov - das ist natürlich das, was ich ** meinte ** zu schreiben. Fixiere es jetzt. – mathguy

0

würde der Standard-SQL-Weg:

UPDATE table 
SET name = 
    CASE WHEN id=1 THEN "first" 
    CASE WHEN id=2 THEN "second" 
    END 
WHERE id IN (1,2) 

Eine weitere Option, um eine temporäre Tabelle zu erstellen wäre, alle der Schlüssel-Wert-Paare einzufügen, und ein JOIN in der UPDATE Anweisung zu tun.

+2

Wenn das Wörterbuch 800 Elemente hat, wird es eine Weile dauern zu schreiben ... – mathguy

+0

@mathguy Nicht für einen Computer :) –

+0

Oh - wenn der Computer den Code generieren wird, dann stimme ich zu. :-) – mathguy

Verwandte Themen