db2 i xml - zapewne naiwny problem
szvej - 17-06-2007 00:19
db2 i xml - zapewne naiwny problem
Witam!
Chcialem napisac funckje, ktora w parametrze dostalaby lancuch znakowy clob ktory traktowalbym jak XML [bo jego zawartosc by na to wskazywala]. W tym XMLu znajdowalyby sie jedynie id pewnych krotek jakiejs tabeli. (np. '<produkt id="2" /><produkt id="13" />...') Funkcja ta mialaby zwrocic lancuch znakowy clob z XMLem zawierajacym informacje wyciagniete z krotek o podanych wczesniej id. (np. '<towar><id>2</id><opis>bardzo fajny</opis><ilosc>12</ilosc></ towar><towar><id>13</id><opis>kieprawy</opis><ilosc>1</ilosc></ towar>...')
Wiem co chce, ale nie wiem jak to zrealizowac. Problem napotykam kiedy szukam sposobu w jaki moge przegladac parametr. Na stronach intrnetowych ibm znalazlem wiele informacji jak przegladac kolumny typu XML tabel. Wydaje mi sie jednak, ze chyba nie ma sensu specjalnie tworzyc tabele, aby mozna bylo uzywac wlasnie tamtych rozwiazan. A w takim wypadku nie wiem jak sie do tego dobrac, bo alternatywnych rozwiazan nie znalazlem. Gdybym mial juz te id wyjete z parametru w jednej kolumnie i w osobnych komorkach wowczas nie byloby problemu poleceniem xml2clob wygenerowac wyjsciowy lancuch znakow.
Bylbym bardzo wdzieczny za pomoc. Nie koniecznie w zaproponowany sposob (tj. z tworzeniem tabeli, ktora laczylbym z tabela z informacjami do wyciagniecia). Moze jakis inny, lepszy, szybszy, prostrzy. Moze to jedno polecenie xmlQuery w polaczeniu z SQLem. Ja jednak mam sladowe dowiadczenie w sql serverze z danymi xml a w db2 na razie raczkuje wiec trudno mi zaproponowac wlasciwe rozwiazanie.
-- pozdrawiam najpiekniej i z gory dziekuje zapomoc! Tomasz Ciesielski
frodo2000@gmail.com - 17-06-2007 00:19
On 11 Cze, 18:11, szvej <szwe...@gmail.com> wrote: > Witam! > > Chcialem napisac funckje, ktora w parametrze dostalaby lancuch znakowy > clob ktory traktowalbym jak XML [bo jego zawartosc by na to > wskazywala]. W tym XMLu znajdowalyby sie jedynie id pewnych krotek > jakiejs tabeli. (np. '<produkt id="2" /><produkt id="13" />...') > Funkcja ta mialaby zwrocic lancuch znakowy clob z XMLem zawierajacym > informacje wyciagniete z krotek o podanych wczesniej id. (np. > '<towar><id>2</id><opis>bardzo fajny</opis><ilosc>12</ilosc></ > towar><towar><id>13</id><opis>kieprawy</opis><ilosc>1</ilosc></ > towar>...') > > Wiem co chce, ale nie wiem jak to zrealizowac. Problem napotykam kiedy > szukam sposobu w jaki moge przegladac parametr. Na stronach > intrnetowych ibm znalazlem wiele informacji jak przegladac kolumny > typu XML tabel. Wydaje mi sie jednak, ze chyba nie ma sensu specjalnie > tworzyc tabele, aby mozna bylo uzywac wlasnie tamtych rozwiazan. A w > takim wypadku nie wiem jak sie do tego dobrac, bo alternatywnych > rozwiazan nie znalazlem. Gdybym mial juz te id wyjete z parametru w > jednej kolumnie i w osobnych komorkach wowczas nie byloby problemu > poleceniem xml2clob wygenerowac wyjsciowy lancuch znakow. > > Bylbym bardzo wdzieczny za pomoc. Nie koniecznie w zaproponowany > sposob (tj. z tworzeniem tabeli, ktora laczylbym z tabela z > informacjami do wyciagniecia). Moze jakis inny, lepszy, szybszy, > prostrzy. Moze to jedno polecenie xmlQuery w polaczeniu z SQLem. Ja > jednak mam sladowe dowiadczenie w sql serverze z danymi xml a w db2 na > razie raczkuje wiec trudno mi zaproponowac wlasciwe rozwiazanie. > > -- > pozdrawiam najpiekniej i z gory dziekuje zapomoc! > Tomasz Ciesielski
Aby wyci ga dane w postaci XMLa z tabeli relacyjnej najlepiej u ywa SQL/XML. Poniewa dane maj by odpowiedzi na zapytanie aplikacji, która wysy a dokument xml'owy, wi c warto przygotowa procedur sk adowan .
Wyobra my sobie, e nasza tabela informacji o produkcje - PRODUCTS - sk ada si z pól: ID typu BIGINT (o warto ci generowanej automatycznie), QUANTITY typu BIGINT oraz DESCRIPTION typu LONG VARCHAR
Wówczas nasza procedura sk adowana b dzie wygl da w sposób nast puj cy: CREATE PROCEDURE SELECT_PRODUCT (IN PROD_NUMBER_XML XML) DYNAMIC RESULT SETS 1 ------------------------------------------------------------------------ -- SQL Procedura sk adowana ------------------------------------------------------------------------ P1: BEGIN -- Deklaruj kursor
DECLARE cursor1 CURSOR WITH RETURN FOR WITH result(PRODUCT_ID, QUANTITY, DESCRIPTION) AS ( SELECT ID, QUANTITY, DESCRIPTION FROM PRODUCTS, XMLTABLE( 'for $c in $a//produkt return $c' passing PROD_NUMBER_XML as "a" COLUMNS prod_id BIGINT path '@id' ) as T WHERE id=prod_id ) SELECT XMLELEMENT( NAME "produkty", XMLAGG( XMLELEMENT( NAME "towar", XMLELEMENT( NAME "id", PRODUCT_ID ), XMLELEMENT( NAME "ilo ", QUANTITY ), XMLELEMENT( NAME "opis", DESCRIPTION ) ) ) ) FROM result; OPEN cursor1; END P1
Standardowo procedur wywo ujemy poleceniem CALL SELECT_PRODUCT(XMLPARSE(DOCUMENT '<wybierz><produkt id="1" / >...<produkt id="5" /></wybierz>'));
Dla przyk adu zamieszczam kod napisany w Javie do uruchamiania procedury: Class.forName("com.ibm.db2.jcc.DB2Driver");
String url = "jdbc:db2:test"; String user = "user"; String password = "*****"; Connection con = DriverManager.getConnection(url, user, password);
java.sql.Clob clobData = com.ibm.db2.jcc.t2zos.DB2LobFactory.createClob("<w ybierz><produkt id= \"1\" /><produkt id=\"5\" /></wybierz>");
PreparedStatement stmt = con.prepareStatement("CALL SELECT_PRODUCT(XMLPARSE(DOCUMENT cast(? as Clob) strip whitespace))"); stmt.setClob(1,clobData);
ResultSet result = stmt.executeQuery(); while (result.next()){ DB2Xml productColumn = (DB2Xml)result.getObject(1); System.out.println(productColumn.getDB2String()); }
---------------------- Pozdrawiam, Marcin Molak
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
mysql i mysql-front, problem
String line; if (line=="cos"){...}....problem
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
[postgres] Problem z =?ISO-8859-2?Q?zmian=B1_struktury_i_z?==?ISO-8859-2?Q?ale=BFno=B6ciami=2E?=
[oracle] =?ISO-8859-2?Q?zmia=BFd=BFony_przez_problem=3A_za?==?ISO-8859-2?Q?pytanie_do_hierarchi?=
Problem z wartościami w MySQL :( [ MySQL and ASP and VBScript ]
[PGSQL] czy ktos mial problemy z initdb pgsql 8.1 ?
[MySQL] Problem z zapisem danych w bazie danych
Problem z mysql - can't connect to MySQL/nietypowo...
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 |
|