[SQL] Inteligentne dodawanie (insert)
Jakub Lambrych - 20-02-2006 14:09
[SQL] Inteligentne dodawanie (insert)
Szanowni Grupowicze,
w mojej przygodzie z językiem SQL natrafiłem na poniższy problem, z którym (jak pewnie się domyślacie) nie potrafię sobie poradzić.
Powiedzmy, że mam tabelę (SQLite):
CREATE TABLE dane( kazwisko TEXT, id2 INTEGER, id3 INTEGER koemntarz TEXT );
W pliku xml, który mam zamiar sparsować, znajdują się ZDUBLOWANE dane np.:
<dane nazwisko="Kowalski" id2="2" id3="3" komentarz="super" /> <dane nazwisko="Kowalski" id2="" id3="" komentarz="super"/>
Chciałbym dodać do tabeli dany rekord wzięty z pliku xml, ale tylko ten, który ma pola id2 i id3 zapełnione (rekordy są "podobne" kiedy pola "nazwisko" oraz "komentarz" są równe). Są możliwe dwa przypadki:
1) Parser najpier natrafia na : <dane nazwisko="Kowalski" id2="" id3="" komentarz="super"/> i dodaje taki rekord to tabeli, ale gdy natrafi na: <dane nazwisko="Kowalski" id2="2" id3="3" komentarz="super" /> to powinien uaktulanić dane.
2)Parser najpier natrafia na : <dane nazwisko="Kowalski" id2="2" id3="3" komentarz="super" /> i dodaje taki rekord to tabeli, ale gdy natrafi na: <dane nazwisko="Kowalski" id2="2" id3="3" komentarz="super" /> powinien zignorować drugi rekord.
Wydaje mi się, że najlepiej byłoby rozwiązać ten problem za pomocą triggera, ale moja skromna wiedza (choć pogłębiona pozukiwaniami na google) niestety tutaj "wysiada". Czy moglibyście mi pomóc? Będę bardzo wdzięczny.
Gorąco pozdrawiam i z góry dziękuję za wszelką pomoc, Jakub Lambrych
news997 - 20-02-2006 14:09
"Jakub Lambrych" <nie@ma.pl> schrieb im Newsbeitrag news:dtamb0$b1r$1@atlantis.news.tpi.pl... > Szanowni Grupowicze, > > w mojej przygodzie z językiem SQL natrafiłem na poniższy problem, z którym > (jak pewnie się domyślacie) nie potrafię sobie poradzić. > > Powiedzmy, że mam tabelę (SQLite): > > CREATE TABLE dane( > kazwisko TEXT, > id2 INTEGER, > id3 INTEGER > koemntarz TEXT > ); > > W pliku xml, który mam zamiar sparsować, znajdują się ZDUBLOWANE dane np.: > > <dane nazwisko="Kowalski" id2="2" id3="3" komentarz="super" /> > <dane nazwisko="Kowalski" id2="" id3="" komentarz="super"/> > > Chciałbym dodać do tabeli dany rekord wzięty z pliku xml, ale tylko ten, > który ma pola id2 i id3 zapełnione (rekordy są "podobne" kiedy pola > "nazwisko" oraz "komentarz" są równe). Są możliwe dwa przypadki: > > 1) Parser najpier natrafia na : > <dane nazwisko="Kowalski" id2="" id3="" komentarz="super"/> > i dodaje taki rekord to tabeli, ale gdy natrafi na: > <dane nazwisko="Kowalski" id2="2" id3="3" komentarz="super" /> > to powinien uaktulanić dane. > > 2)Parser najpier natrafia na : > <dane nazwisko="Kowalski" id2="2" id3="3" komentarz="super" /> > i dodaje taki rekord to tabeli, ale gdy natrafi na: > <dane nazwisko="Kowalski" id2="2" id3="3" komentarz="super" /> > powinien zignorować drugi rekord. > > Wydaje mi się, że najlepiej byłoby rozwiązać ten problem za pomocą > triggera, ale moja skromna wiedza (choć pogłębiona pozukiwaniami na > google) niestety tutaj "wysiada". Czy moglibyście mi pomóc? Będę bardzo > wdzięczny.
W oraclu jest funkcja merge. Poza tym możesz np. sprawdzać czy dany wiersz istnieje przed każdym insertemi dopiero wtedy robic commit. Możesz też zaimportować wszystko do tymczasowej tabeli i poźniej wziąść z niej tylko jednoznaczne wiersze.
dap -- polanski.biz xoops.pl
Jakub Lambrych - 20-02-2006 14:09
> > W oraclu jest funkcja merge. Niestety docelowo jest to SQLite :-(
> Poza tym możesz np. sprawdzać czy dany wiersz istnieje przed każdym > insertemi dopiero wtedy robic commit. Problem w tym, że parser xml nie komunikuje się z bazą tylko generuje plik tekstowy z "definicjami" INSERTów. Późiej plik testowy jest ładowany do bazy za pomoca wizualnego menagera.
Możesz też zaimportować wszystko do > tymczasowej tabeli i poźniej wziąść z niej tylko jednoznaczne wiersze.
Hmm...ale to też chyba z poziomu "na zewnątrz" bazy.
Dziękuję bardzo za odpowiedź, Jakub Lambrych
emes - 20-02-2006 14:09
replace ?
-- emes
Jakub Lambrych - 20-02-2006 14:09
emes napisał(a): > replace ? > tak, tylko, że replace działa bezdusznie i nadpisze dobre informacje pustymi polami (przypadek 2).
Gorąco pozdrawiam, J.L
emes - 20-02-2006 14:09
no za bardzo nie wiem w czym problem, to dorob logike po stronie aplikacji, badz wladuj trigerra instead of jesli to ms sql czy mysql 5
-- emes
Noel - 20-02-2006 14:10
Użytkownik Jakub Lambrych napisał:
> > Wydaje mi się, że najlepiej byłoby rozwiązać ten problem za pomocą > triggera, ale moja skromna wiedza (choć pogłębiona pozukiwaniami na > google) niestety tutaj "wysiada". Czy moglibyście mi pomóc? Będębardzo > wdzięczny. >
Zaimportuj wszystko jak leci, a potem tylko usuń niepotrzebne.
-- Tomek "Noel" B.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plown-team.pev.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|