[Oracle 10g - updateXML] - prosba o pomoc
Gordon - 11-05-2007 12:33
[Oracle 10g - updateXML] - prosba o pomoc
Witam. Mam taka strukture. Taki XML:
<B_PRACOWNIK> <pracownik> <imie>Tomasz</imie> <nazwisko>Kowalski</nazwisko> <telefon>55 641 43 32</telefon> </pracownik> <pracownik> <imie>Jan</imie> <nazwisko>Nowak</nazwisko> <telefon>55 641 43 33</telefon> </pracownik> <pracownik> <imie>Tadeusz</imie> <nazwisko>Wiśniewski</nazwisko> <telefon>55 641 43 33</telefon> </pracownik> </B_PRACOWNIK>
No i sie okazalo, ze zapomnialem w danych wszedzie wpisac '0' przed numerem kierunkowym, chcialbym miec numer w takiej postaci 055 641 43 33. No i problem mam taki, ze jak pisze updateXML(object_value, '//pracownik/telefon/text()', '0'||extractValue(object_value, '//pracownik/telefon')) no to wcale mnie nie dziwi, ze dostaje blad, gdyz mam 3 telefony i nie wiadomo, ktora wartosc chce pobrac do updateXML. I nie mam pojecia jak napisac ten update aby w taki sposob pododawac wszedzie 0 przed cyfre.
Bardzo prosze o pomoc bo juz sie zmeczylem. Przyklad jest wymyslony w celu zadania pytania. Pozdrawiam i dziekuję za ewentualne odpowiedzi. Tomek.
szvej - 11-05-2007 12:33
ja, gdybym byl madrzejszy, nie zrobilbym tak.. ale gdyby mi sie dzisiaj spieszylo to tak wlasnie jak ponizej: [sql server 2005]
declare @plik xml set @plik ='<B_PRACOWNIK> <pracownik> <imie>Tomasz</imie> <nazwisko>Kowalski</nazwisko> <telefon>55 641 43 32</telefon> </pracownik> <pracownik> <imie>Jan</imie> <nazwisko>Nowak</nazwisko> <telefon>55 641 43 33</telefon> </pracownik> <pracownik> <imie>Tadeusz</imie> <nazwisko>Wiśniewski</nazwisko> <telefon>55 641 43 33</telefon> </pracownik> </B_PRACOWNIK>'
declare @ilPracownikow int set @ilPracownikow = @plik.value('count(/B_PRACOWNIK/pracownik/ telefon)', 'int') declare @i int declare @tmp varchar(400) set @i = 0 while @i < @ilPracownikow begin set @i = @i + 1 set @tmp = @plik.value('(/B_PRACOWNIK/ pracownik[position()=sql:variable("@i")]/telefon)[1]', 'varchar(400)') set @tmp = '0' + @tmp set @plik.modify('replace value of (B_PRACOWNIK/pracownik[position() = sql:variable("@i")]/telefon/text())[1] with sql:variable("@tmp")') end
select @plik
-- pozdrawiam, szwejk
On 8 Maj, 14:27, "Gordon" <w...@op.pl> wrote: > Witam. > Mam taka strukture. Taki XML: > > <B_PRACOWNIK> > <pracownik> > <imie>Tomasz</imie> > <nazwisko>Kowalski</nazwisko> > <telefon>55 641 43 32</telefon> > </pracownik> > <pracownik> > <imie>Jan</imie> > <nazwisko>Nowak</nazwisko> > <telefon>55 641 43 33</telefon> > </pracownik> > <pracownik> > <imie>Tadeusz</imie> > <nazwisko>Wiśniewski</nazwisko> > <telefon>55 641 43 33</telefon> > </pracownik> > </B_PRACOWNIK> > > No i sie okazalo, ze zapomnialem w danych wszedzie wpisac '0' przed numerem > kierunkowym, chcialbym miec numer w takiej postaci 055 641 43 33. > No i problem mam taki, ze jak pisze > updateXML(object_value, '//pracownik/telefon/text()', > '0'||extractValue(object_value, '//pracownik/telefon')) > no to wcale mnie nie dziwi, ze dostaje blad, gdyz mam 3 telefony i nie > wiadomo, ktora wartosc chce pobrac do updateXML. > I nie mam pojecia jak napisac ten update aby w taki sposob pododawac > wszedzie 0 przed cyfre. > > Bardzo prosze o pomoc bo juz sie zmeczylem. > Przyklad jest wymyslony w celu zadania pytania. > Pozdrawiam i dziekuję za ewentualne odpowiedzi. > Tomek.
Gordon - 11-05-2007 12:33
Dzieki za odpowiedz. Co prawda szukam czegos bardziej zblizonego do wykonania poprostu update z uzyciem funkcji updateXML w oracle. Ale pomysl z procedurka moze w ostatecznosci sie przydac. Niestety tych plikow XML to mam kilka tysiecy do zupdatowania i dlatego procedurka mi nie lezy pod wzgledem wydajnosci. Ale ostatecznie takie rozwiazanie bede musial przyjac jesli inne sie nie znajdzie. Jeszcze raz dzieki za odpowiedz i za poswiecony czas. Pozdrawiam Tomek.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
Oracle 19g +Insert +Insert +Insert...
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
=?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
[Oracle] =?ISO-8859-2?Q?=A3=B1czenie_wierszy_z_zapytania_?==?ISO-8859-2?Q?w_jeden_string?=
zanotowane.pldoc.pisz.plpdf.pisz.plmisida.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 |
|