ďťż
 
[SQL] Inteligentne dodawanie (insert) ďťż
 
[SQL] Inteligentne dodawanie (insert)
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • own-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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com