Code : Sélectionner tout - Visualiser dans une fenêtre à part Server version: 5.1.61
Bonjour a tous
alors voila,
une table biblioitems
dans cette table un champs
marcxml
le contenu de ce champs:
Le but est de parser pour faire un update de cette partie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 | <?xml version="1.0" encoding="UTF-8"?> <record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standa rds/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim"> | <?xml version="1.0" encoding="UTF-8"?> <record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim"> <leader>01331ntm a22003257a 4500</leader> <controlfield tag="001">.b21442988</controlfield> <controlfield tag="003">ES-BaCBU</controlfield> <controlfield tag="008">980309s1997 spcad | m 000 ||spa|c</controlfield> <datafield tag="017" ind1=" " ind2=" "> <subfield code="a">B.38094-2009</subfield> </datafield> <datafield tag="020" ind1=" " ind2=" "> <subfield code="a">9788469256299</subfield> </datafield> <datafield tag="035" ind1=" " ind2=" "> <subfield code="a">C144736560</subfield> <subfield code="9">ES-BaCBU001</subfield> </datafield> <datafield tag="035" ind1=" " ind2=" "> <subfield code="a">1447-36560</subfield> <subfield code="9">ES-BaCBU035</subfield> </datafield> <datafield tag="100" ind1="1" ind2=" "> <subfield code="a">Trillas i Gay, Enric</subfield> </datafield> <datafield tag="245" ind1="1" ind2="0"> <subfield code="a">Acció del vent sobre una estructura :</subfield> <subfield code="b">anà lisi teòric i experimental</subfield> <subfield code="h">[Recurs electrònic] /</subfield> <subfield code="c">Enric Trillas Gay ; dirigida per: E. Egusquiza Estevez i E. Valencia Leonardo</subfield> </datafield> <datafield tag="260" ind1=" " ind2=" "> <subfield code="c">1997</subfield> </datafield> <datafield tag="502" ind1=" " ind2=" "> <subfield code="a">Tesi doctoral-UPC. Escola Tècnica Superior d'Enginyers Industrials de Barcelona. Departament de Mecà nica de Fluids, 1997</subfield> </datafield> <datafield tag="650" ind1="0" ind2="4"> <subfield code="a">Estructures</subfield> <subfield code="x">Accions</subfield> <subfield code="x">Models matemà tics</subfield> <subfield code="x">Tesis doctorals</subfield> </datafield> <datafield tag="650" ind1="0" ind2="4"> <subfield code="a">Estructures</subfield> <subfield code="x">Prevenció contra el vent</subfield> <subfield code="x">Tesis doctorals</subfield> </datafield> <datafield tag="650" ind1="0" ind2="4"> <subfield code="a">Estructures</subfield> <subfield code="x">Cà lcul</subfield> <subfield code="x">Vent</subfield> <subfield code="x">Tesis doctorals</subfield> </datafield> <datafield tag="655" ind1=" " ind2="4"> <subfield code="a">Tesis i dissertacions electròniques </subfield> </datafield> <datafield tag="700" ind1="1" ind2=" "> <subfield code="a">Egusquiza, Eduard</subfield> </datafield> <datafield tag="700" ind1="1" ind2=" "> <subfield code="a">Valencia Leonardo, Eugenio</subfield> </datafield> <datafield tag="710" ind1="2" ind2=" "> <subfield code="a">Universitat Politècnica de Catalunya.</subfield> <subfield code="b">Departament de Mecà nica de Fluids</subfield> </datafield> <datafield tag="730" ind1="0" ind2=" "> <subfield code="a">TDX</subfield> </datafield> <datafield tag="856" ind1="4" ind2="0"> <subfield code="u">http://www.tdx.cat/TDX-0722109-103537/</subfield> </datafield> <datafield tag="907" ind1=" " ind2=" "> <subfield code="a">.b21442988</subfield> <subfield code="b">21-05-12</subfield> <subfield code="c">07-05-08</subfield> <subfield code="d">09-03-98</subfield> <subfield code="e">m</subfield> <subfield code="f">q</subfield> <subfield code="g">e</subfield> <subfield code="h">spa</subfield> <subfield code="i">spc</subfield> <subfield code="j">0</subfield> <subfield code="k">1</subfield> </datafield> <datafield tag="998" ind1=" " ind2=" "> <subfield code="a">p</subfield> </datafield> <datafield tag="935" ind1=" " ind2=" "> <subfield code="a">1447-36560</subfield> </datafield> <datafield tag="940" ind1=" " ind2=" "> <subfield code="a">UPC</subfield> </datafield> <datafield tag="999" ind1=" " ind2=" "> <subfield code="c">151237</subfield> <subfield code="d">151236</subfield> </datafield> </record> |
pour tous les rows dont le subfield 003 est = a "ES-BaCBU"
Code : Sélectionner tout - Visualiser dans une fenêtre à part <controlfield tag="001">.b21442988</controlfield>
Comme vous le voyez y'a 10 caracters et seul 9 sont acceptés donc il faut virer le dernier
J'arrive a extraire les valeurs voulues avec la modification deja:
Le resultat du xml que je vous passe serait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select SUBSTRING(ExtractValue(marcxml,'//controlfield[@tag="001"]'),-10,9) as item from biblioitems where ExtractValue(marcxml,'//controlfield[@tag="003"]') ='ES-BaCBU' and LENGTH(ExtractValue(marcxml,'//controlfield[@tag="001"]'))=10;
Le probleme c'est que je ne sait pas faire une boucle pour faire un UPDATE des 9000 tuples concernées d'un seul coup car il faut utiliser une fonction du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ... | <?xml version="1.0" encoding="UTF-8"?> <record xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd" xmlns="http://www.loc.gov/MARC21/slim"> <leader>01331ntm a22003257a 4500</leader> <controlfield tag="001">.b2144298</controlfield> ....
A part le probleme de l'update je voudrais que la function soit lancée par un trigger sur insert ou update.
Code : Sélectionner tout - Visualiser dans une fenêtre à part UpdateXml(marcxml, '/record/controlfield[@tag=001]', '<controlfield tag="001">.b2144298</controlfield>')
Quelque'un a une idée
D'avance merci
Partager