Piotr K.

Piotr K. QA / Test Engineer
at Luxoft / UBS

Temat: Oracle mass UPDATE

Witam,

Czasami potrzebuje zrobic masowy UPDATE na pojedynczych rekordach w bazie, i zastanawiam sie jakie byloby najszybsze i najefektywniejsze podejscie / rozwiazanie do takiego problemu:

Zawsze mam podane 'userid' (identyfikator) oraz pole ktore trzeba zaktualizowac np. 'companyname'. Zalozmy, ze pole ktore trzeba uaktualnic jest dla kazdego rekordu inne.

x1 c1
x2 c2
. .
. .
. .
xn cn

Dane ktore trzeba zaktualizowac mam w pliku (xls), ktory zalozmy ze moge wyfiltrowac zeby zawieralo tylko dwie interesujace mnie kolumny: 'userid' oraz 'companyname' i poddac jakiejs dalszej obrobce.

Pojedyncze zapytanie mogloby wygladac np. tak:

UPDATE (SELECT companyname, timestamp FROM userdata WHERE userid = 'x1')
SET companyname = 'c1', timestamp = CURRENT_TIMESTAMP;


Uzywam SQL Developera do laczenia sie z baza i manipulowania danymi. Może znacie jakieś ciekawe narzedzia do automatycznego generowania "batchów" na podstawie podanych regul, wyjatkow, etc. Ogolnie jestem ciekaw jak podchodzicie do tego typu "taskow" (pierwsza myśl to napisanie programu w PL/SQL i w petli ladowac dane z pliku lub cos w tym stylu).

Piotrek

konto usunięte

Temat: Oracle mass UPDATE

Witam,

Nie wiem na ile to się przyda (działa w SQL Server i PostgreSQL) ale może:

UPDATE table SET col=table2.col_new_value FROM table2 WHERE table.id=table2.id

Pozdrawiam,

johnJohn R. edytował(a) ten post dnia 14.01.10 o godzinie 21:43
Andrzej P.

Andrzej P. Oracle Database
Consultant

Temat: Oracle mass UPDATE

Jak dane są już w Excelu, to można napisać w kolumnie obok formułę dla każdego rekordu, coś w stylu:

="UPDATE tabela SET kolumna1=''" & A1 & "'' WHERE kolumna2=''" & A2 & "'';"

Rozciągasz formułę na cały interesujący Cię zbiór, kopiujesz do Schowka i wklejasz do narzędzia SQL.

Pozdrawiam,
Andrzej
Piotr K.

Piotr K. QA / Test Engineer
at Luxoft / UBS

Temat: Oracle mass UPDATE

Andrzej P.:
Jak dane są już w Excelu, to można napisać w kolumnie obok formułę dla każdego rekordu, coś w stylu:

="UPDATE tabela SET kolumna1=''" & A1 & "'' WHERE kolumna2=''" & A2 & "'';"

Rozciągasz formułę na cały interesujący Cię zbiór, kopiujesz do Schowka i wklejasz do narzędzia SQL.

Pozdrawiam,
Andrzej

no właśnie tego już próbowałem i coś mi tam excel bruździł, nie wiem, może źle sformatowałem skoroszyt, ale usuwał mi apostrofy z komórki (''), a że wtedy potrzebowałem opracować coś w miarę szybko, jakoś nie drążyłem tego tematu i częściowo manualnie przygotowywałem skrypt (na szczęście bardzo dużo rekordów nie było). Dlatego właśnie postanowiłem podpytać tutaj, tak żeby wypracować jakiś sposób na zaś :). Zazwyczaj dane tylko wyciągam z bazy, więc z update'ami to wole ostrożnie.

konto usunięte

Temat: Oracle mass UPDATE

próbowałeś z IN
UPDATE tabela SET kolumna1='cos' WHERE kolumna IN (1,2,3,4,5,6,8)

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

konto usunięte

Temat: Oracle mass UPDATE

Tak, to jest sensowne, tylko w większości przypadków potrzeba jeszcze dla każdego z rekordów inną wartość.


UPDATE lab10.items SET
symbol = CASE
WHEN item_id=1 THEN 'X100'
WHEN item_id=2 THEN 'X200'
WHEN item_id=3 THEN 'X300'
END
WHERE
item_id IN (1, 2, 3);


Co do samych ograniczeń, to raczej stoją po stronie narzędzi, z których korzystasz, więc pewnie nie należy przesadzać ;)
Piotr K.

Piotr K. QA / Test Engineer
at Luxoft / UBS

Temat: Oracle mass UPDATE

ok. dzięki za wszystkie odpowiedzi (muszę to sobie zbookmarkować), dopracowałem wariant z formułą w Excel i "przeciąganiem" komórek i jest git. temat uważam za zamknięty.

Pozdrawiam,
Piotr

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

Następna dyskusja:

[Oracle] Procedura update n...




Wyślij zaproszenie do