Keresés

Részletes keresés

mma Creative Commons License 2009.05.13 0 0 26
Találkozott már valaki azzal a problémával, hogy az XML kezelés egy idő után rettenetesen belassul? XML típusú tábláról van szó, 1 rekord 1 xml fájlként látszik a WebDav folderben. Szóval egy idő után rettentően lelassul, de ismét felgyorsul, ha a következőt megcsináljuk:

1. kimásolok minden xml fájlt a WebDav folderből egy lokális könyvtárba
2. törlöm az xml fájlokat az adatbázisból (WebDav folderből)
3. visszamásolom a fájlokat a WebDav folderbe

Sajnos az adott konkrét esetben a fájlok visszamásolása 44 óra hosszat tart, úgyhogy jó lenne valami szerencsésebb módszert találni vagy a lelassulás elkerülésére, vagy az ismételt felgyorsításra.

Van valakinek ezzel kapcsolatos ötlete?
deratis1 Creative Commons License 2008.02.14 0 0 25

Szia!

 

Köszönöm az előző választ! Igaz kicsit későn köszönöm!

De lenne egy elvi kérdés!

 

A namespacekkel kapcsolatban!

 

<urn:DTM xmlns:urn="urn:fr.vf.dt:v3">  

  <urn:Header>
    <urn:OC>KLILU</urn:OC>
  </urn:Header>
  <urn1:Body xmlns:urn="urn:fr.vf.dt:eud:v3" xmlns:urn1="urn:fr.vf.dt:v3" >

    <urn:BB>KIKI01</urn:BB>

  </urn1:Body>

</urn:DTM>

 

A kérdés az, hogy mennyire lehet az azonos nevű namespace-kat egy xml-en belül azonos névvel más tartalommal használni?

 

 

Üdv deratisŽ

 

 


mma Creative Commons License 2007.11.13 0 0 24

Pl. így:

select
  cast(extractvalue( value( p ), '/row/@Id','xmlns="cardtype"') as varchar2(5)) Id,
  cast(extractvalue( value( p ), '/row/@code','xmlns="cardtype"') as varchar(5)) Code,
  cast(extractvalue( value( q ), '/adat','xmlns="cardtype"') as varchar(5)) adat
from
   zzz x ,
   table (xmlsequence(xmltype.extract(value(x),                       '/cardtype/data/row','xmlns="cardtype"')))  p
  ,table(xmlsequence(extract( value( p ), '/row/belso/adat','xmlns="cardtype"') )) q
;

Előzmény: deratis1 (23)
deratis1 Creative Commons License 2007.11.13 0 0 23

szia!

 

És hogyan lehet úgyanilyen módszerrel lekérdezni a

 

INSERT INTO ZZZ SELECT XMLType.createXML('<?xml version="1.0" encoding="utf-8"?>
       <cardtype xmlns="cardtype">
         <data>
           <row Id="15" code="A">
             <belso>
               <adat>1</adat>
               <adat>2</adat>
             </belso>
           </row>
           <row Id="20" code="B">
             <belso>
               <adat>3</adat>
               <adat>4</adat>
             </belso>
           </row>
           <row Id="22" code="A">
             <belso>
               <adat>5</adat>
               <adat>6</adat>
             </belso>
           </row>
       </data>
     </cardtype>' ) FROM dual;

 

amit látni szerettem volna az a 15 A 1

                                                  15 A 2

                                                   20 B 3

                                                   20 B 4

                                                   22 A 5

                                                   22 A 6

 

Üdv deratis

Előzmény: Tomathos (19)
mma Creative Commons License 2007.06.13 0 0 22

Újabb problémába ütköztem. Bár meg is tudom kerülni a dolgot, leírom, hátha valaki találkozott már ilyennel, és tud rendes megoldást rá.

 

Pillanatnyilag a programunk sys_xmlgen-nel hozza létre a kimenő xml-t, és DBMS_XDB.createResource-szal tárolja le a WebDav folderbe, ahonnan egy idegen web service kiszedi, és használja a saját céljaira. Ez így szépen működik is.

 

Most annyi változás van, hogy a sémában szereplő base64Binary típusú (opcionális) elemeket is töltenem kell. Meglepődve tapasztaltam, hogy az Oracle ehhez a típushoz RAW, vagy  BLOB típusú mezőt rendel, ami teljesen más, mint a base64Binyary, hiszen ezek csak a hexadecimális számok karaktereit (számokat és A-től F-ig betűket) tartalmazzák, míg a base64Binary típus az angol ábécé összes betűjét tartalmazhatja. Abban reménykedtem, hogy majd a sys_xmlgen visszakonvertálja ezeket a tartalmakat normális base64Binary-vá, de nem teszi.

 

A problémát úgy tudom például megkerülni, hogy nem az eredeti sémát regisztrálom, hanem a base64Binary típusokat lecserélem stringre, és ezzel dolgozom. De azért érdekelne, hogy a már foglalkoztak az Oracle-nél ezzel az adattípussal, akkor hogy képzelték a használatát. Ha valaki tudja, kérem árulja el nekem!

 

mma Creative Commons License 2006.11.21 0 0 21
Az is elég lenne nekem, ha egy XML-típusú táblából lehetne objektum-formában is szelektálni a sorokat, nem csak XML-ben, vagy clob-ban.
Előzmény: mma (20)
mma Creative Commons License 2006.11.21 0 0 20
Hi Thomatos, welcome to Oracle XML!
Látom, te is gyorsabban oldottad meg a problémádat, minthogy valaki segíthetet volna:-)
 
Most nekem van ismét újabb kérdésem. Nem akadok meg akkor sem, ha nem oldódik meg, de egy csomó dolog sokkal egyszerubb lenne, ha nemcsak user-objektumokat lehetne XML-lé konvertálni (az alább emlegetett sys_xmlgen-nel, vagy XMLTYPE.createXML-lel), hanem fordítva is menne valahogy, vagyis egy xmlből (vagy egy ágából) lehetne olyan user-objektumot létrehozni, amilyenből ő létrehozható.
 
Tehát például egy
<Dolgozo>
  <Nev>Kiss Pista</Nev>
  <IdegenNyelv>angol</IdegenNyelv>
  <IdegenNyelv>orosz</IdegenNyelv>
</Dolgozo>

 
stringből "Dolgozo_t" típusú objektumot .
 
Lehetséges ez valahogy szerintetek?   (Persze úgy én is tudom, hogy szétextraktolom, aztán a darabkákból felépítem az objektumot.  Valami közvetlen módszerre gondolok)

Előzmény: Tomathos (19)
Tomathos Creative Commons License 2006.11.20 0 0 19

Cool :)

 

SELECT extractvalue( value( p ), '/row/@Id','xmlns="cardtype"') Id

,extractvalue( value( p ), '/row/@code','xmlns="cardtype"') Code

FROM ZZZ x, TABLE( xmlsequence( extract( value( x ), '//data/row','xmlns="cardtype"' ) ) ) p ;

Előzmény: Tomathos (18)
Tomathos Creative Commons License 2006.11.20 0 0 18

Ezzel kapcsolatban én is szívesen venném az ötleteket :)))

 

CREATE TABLE ZZZ OF xmltype;

 

INSERT INTO ZZZ SELECT XMLType.createXML('<?xml version="1.0" encoding="utf-8"?><data><row Id="15" code="A" /><row Id="20" code="B" /><row Id="22" code="A" /></data>' ) FROM dual;

 

-- ez ok

SELECT extractvalue( value( p ), '/row/@Id') Id,extractvalue( value( p ), '/row/@code') Code

FROM ZZZ x, TABLE( xmlsequence( extract( value( x ), '/data/row' ) ) ) p;

 

TRUNCATE TABLE ZZZ;

 

-- itt viszont a cardtype-al nem akar menni

INSERT INTO ZZZ SELECT XMLType.createXML('<?xml version="1.0" encoding="utf-8"?><cardtype xmlns="cardtype"><data><row Id="15" code="A" /><row Id="20" code="B" /><row Id="22" code="A" /></data></cardtype>' ) FROM dual;

 

SELECT extractvalue( value( p ), '/row/@Id','xmlns="cardtype"') Id

,extractvalue( value( p ), '/row/@code','xmlns="cardtype"') Code

FROM ZZZ x, TABLE( xmlsequence( extract( value( x ), '/cardtype/data/row' ) ) ) p;

mma Creative Commons License 2006.11.14 0 0 17

És megy ám a sys_xmlgen-nel is:
 
select sys_xmlgen(
"Dolgozo_t"(NULL,'Kiss Pista',"Nyelvek_t"('angol','orosz')),
xmlformat.createformat('Dolgozo','USE_GIVEN_SCHEMA','sample.xsd')
)
from dual;

Csak épp a sokezer oldalas Oracle dokumentációban, és az egész interneten  egyetlen példa sincs arra, hogy is kell ezt a createformat-ot paraméterezni. Azért, ha nehezen is, csak sikerült megfejtenem.
 
Nem tudja valaki véletlenül, hogy a "Dolgozo_t"-nek igazából mi kéne az első NULL paraméter helyett (csak azért írtam NULL-t mert valamit muszáj volt ideírni)?


 

A  describe "Dolgozo_t"; kérdés így írja le a típust:

 

 SYS_XDBPD$         XDB.XDB$RAW_LIST_T

 Nev                       VARCHAR2(4000 CHAR)

 IdegenNyelv         Nyelvek_t

 

Szóval, mi a szösz ez a XDB.XDB$RAW_LIST_T típusú  SYS_XDBPD$?

Előzmény: mma (16)
mma Creative Commons License 2006.11.11 0 0 16

Köszönöm mindenkinek, aki törte ezen a fejét, de megtaláltam a megoldást.
Egész pontosan leírva, az alábbi xsd-t használtam:
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="
http://www.w3.org/2001/XMLSchema" xmlns:oraxdb="http://xmlns.oracle.com/xdb" oraxdb:schemaURL="sample.xsd">
 <xs:simpleType name="ST2_Nev">
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
 <xs:simpleType name="ST2_IdegenNyelv">
  <xs:restriction base="xs:string"/>
 </xs:simpleType>
 <xs:complexType name="CT_Dolgozo" oraxdb:SQLType="Dolgozo_t" oraxdb:SQLSchema="XMLTEST">
  <xs:sequence>
   <xs:element name="Nev" type="ST2_Nev" oraxdb:SQLName="Nev" oraxdb:SQLType="VARCHAR2" oraxdb:SQLInline="true"/>
   <xs:element name="IdegenNyelv" type="ST2_IdegenNyelv" maxOccurs="unbounded" oraxdb:SQLName="IdegenNyelv" oraxdb:SQLType="VARCHAR2" oraxdb:SQLInline="true" oraxdb:SQLCollType="Nyelvek_t" oraxdb:SQLCollSchema="XMLTEST"/>
  </xs:sequence>
 </xs:complexType>
 <xs:element name="Dolgozo" type="CT_Dolgozo" oraxdb:SQLName="Dolgozo" oraxdb:SQLType="Dolgozo_t" oraxdb:SQLSchema="XMLTEST" oraxdb:defaultTable="Dolgozo" oraxdb:defaultTableSchema="XMLTEST"/>
</xs:schema>

Ezzel az xsd-vel a rosszul működő kérdésem:

 

select sys_xmlgen("Dolgozo_t"(NULL,'Kiss Pista',"Nyelvek_t"('angol','orosz')),xmlformat.createformat('Dolgozo')) from dual;


 

amire a válasz:

 

<?xml version="1.0"?>
<Dolgozo>
  <Nev>Kiss Pista</Nev>
  <IdegenNyelv>
    <VARCHAR2>angol</VARCHAR2>
    <VARCHAR2>orosz</VARCHAR2>
  </IdegenNyelv>
</Dolgozo>

 

A most megtalált jó kérdés:

 

select XMLTYPE.createXML(
  "Dolgozo_t"(NULL,'Kiss Pista',"Nyelvek_t"('angol','orosz')),
  'sample.xsd',
  'Dolgozo'
)
from dual;


 

A válasz:

 

<Dolgozo>
  <Nev>Kiss Pista</Nev>
  <IdegenNyelv>angol</IdegenNyelv>
  <IdegenNyelv>orosz</IdegenNyelv>
</Dolgozo>

 

Vagyis, pont olyan, amilyet szerettem volna.


 

mma Creative Commons License 2006.11.10 0 0 15
Ismét kérdésem lenne, remélem ezúttal valaki tud is segíteni, mert én már elég tanácstalan vagyok.
 
Ilyesmi szerkezetű XML fájlt szeretnék létrehozni SQL táblák adatainak lekérdezésével:
 
<?xml version="1.0"?>
<Dolgozó>
  <Név>Kiss Pista</Név>
  <IdegenNyelv>angol</IdegenNyelv>
  <IdegenNyelv>orosz</IdegenNyelv>
</Dolgozó>


 
Mégpedig úgy, hogy ennek az xml-nek a struktúráját leíró xml schémát (xsd) regisztrálom, és a regisztráció során létrejövő típusokat használom.
 De sajnos egészen ilyet nem tudok, csak ilyet:
 
<?xml version="1.0"?>
<Dolgozó>
  <Név>Kiss Pista</Név>
  <IdegenNyelv>
    <VARCHAR2>angol</VARCHAR2>
    <VARCHAR2>orosz</VARCHAR2>
  </IdegenNyelv>
</Dolgozó>


 
Hogy meg tudjam mutatni, miről van szó, direktben definiálom a típusokat, és az adatokat is direktben írom be.
Tehát ezt így értem el:
 
Előkészítés:
 
drop type "Dolgozo_t"
/
drop type "Nyelvek_t"
/
create or replace type "Nyelvek_t" as varray(2147483647) of  varchar(40);
/
create or replace type "Dolgozo_t" as OBJECT("Név" varchar2(40),"IdegenNyelv" "Nyelvek_t");
/
 
 
A lekérdezés:

select sys_xmlgen("Dolgozo_t"('Kiss Pista',"Nyelvek_t"('angol','orosz')),xmlformat.createformat('Dolgozó')) from dual;

Ez a lekérdezés tehát a második (piros) eredményt adja.
 
Van valakinek ötlete, hogy lehetne az első (zöld) struktúrájú eredményhez jutni (persze a definiált típusokat használva, vagyis anélkül, hogy leírnám a "Név" és az "IdegenNyelv" szavakat)?
 
mma Creative Commons License 2006.09.28 0 0 14

Upsz, valami eltűnt.

Szóval, a parancs:

 

ALTER user <felhasználó> GRANT CONNECT THROUGH <felhasználó>

 

Előzmény: mma (13)
mma Creative Commons License 2006.09.28 0 0 13
Úgy tűnik, olyan vagyok, mint az egyszeri júzer. Elég, ha elpanaszkodhatom valakinek a bajom, és máris megvan a megoldás. Az oracle-felhasználót még proxy felhasznélónak is fel kellett venni. Az Enterprise managerben meg lehet ezt tenni. Az SQL parancs, amit generált: ALTER user GRANT CONNECT THROUGH
mma Creative Commons License 2006.09.28 0 0 12
Ja, és minden fájl hosszát 0-nak látom.
Előzmény: mma (11)
mma Creative Commons License 2006.09.28 0 0 11
Sajnos megint segítségre szorulok. Megy minden szépen ebben az XML DB-ben, csak az FTP hozzáféréssel van bajom. Félek tőle, hogy ez igazából nem is Oracle probléma, hanem Windows. Az operációs rendszerem Windows Server 2003 Enterprise Edition. Az Oracle-n belül szépen megy minden, de ftp-vel csak a bejelentkezés, a cd és az ls parancs megy. Szépen látom is az XML Database Resources folderének, ill. az alkönyvtárainak a tartalmát, de ha egy get parancsot adok ki, arra ez a válasz: ORA-00942: table or view does not exist. Oracle jogosultságok rendben, XDBADMIN joggal sem, sőt a sys usernek sem megy a dolog. Mi lehet itt a hiba?
mma Creative Commons License 2006.09.27 0 0 10

Magad uram, ha szolgád nincsen...

 

A megoldás:

 

select existsNode(OBJECT_VALUE,'/tns:purchaseOrder/shipTo/name','xmlns:tns="http://xyz.hu/test"')
from
"purchaseOrder284_TAB";


 

Pontosabban, nem egészen magamtól jöttem rá,  hanem végülis találtam példát az Oracle XML DB Developers's guide 10g Release 2 (10.2) B14259-02, August 2005 fájl 6-12. oldalán (ez a pdf 284. oldala). (http://dba-services.berkeley.edu/docs/oracle/manual-10gR2/appdev.102/b14259.pdf#search=%22%22b14259.pdf%22%20dowbload%22

) (vigyázat, a fájl mérete kb 5 MByte!)

 

 

Az ottani példa:

 

existsNode(OBJECT_VALUE,

'/a:PurchaseOrder/PONum',

'xmlns:a=http://xmlns.oracle.com/xdb/documentation/purchaseOrder.xsd)

Előzmény: mma (9)
mma Creative Commons License 2006.09.26 0 0 9
Azt hiszem, hogy nekem tulajdonképpen csak az EXISTSNODE és az EXTRACTVALUE függvények szintaxisával van bajom.
 
A hivatalos szintaxis:
 
EXISTSNODE(<XMLType_Instance>, <XPath_string>, <namespace_string>)
 
ill.
 
EXTRACTVALUE(XMLType_Instance>, <XPath_string>, <namespace_string>)
 
A problémám csak az, hogy milyen formában kell megadni ezt a <namespace_string>-et.
 
Ez nem jó:
 
select existsNode(OBJECT_VALUE,'/purchaseOrder/shipTo/name','tns')
from
"purchaseOrder284_TAB";

 
Ez sem:
 
select existsNode(OBJECT_VALUE,'/purchaseOrder/shipTo/name','tns:')
from
"purchaseOrder284_TAB";

 
Ez sem:
 
select existsNode(OBJECT_VALUE,'/purchaseOrder/shipTo/name','xmlns:tns')
from
"purchaseOrder284_TAB";

 
Ez sem:
 
select existsNode(OBJECT_VALUE,'/purchaseOrder/shipTo/name','http://xyz.hu/test')
from
"purchaseOrder284_TAB";

és ez sem:
 
select existsNode(OBJECT_VALUE,'/purchaseOrder/shipTo/name','xmlns:tns="http://xyz.hu/test"')
from
"purchaseOrder284_TAB";

 
Sajnos égen-földön egyetlen példát nem látok erre a namespace_string-re. Tudja valaki a megoldást?
 
 
 
 
Előzmény: mma (7)
mma Creative Commons License 2006.09.25 0 0 8

Az Oracle Entrerprise Manager Console-ből nézve egyébként így fest a dolog:

 

Resources\XMLTEST

 

XML Schema\y1.xsd

 

XML Schema\y2.xsd
Előzmény: mma (7)
mma Creative Commons License 2006.09.25 0 0 7
Ha jól látom, már majdnem 2 éve volt ez a dolog. Meglepő módon az Oracle8i-ben ment végülis flottul minden. A megrendelő csak most szánta rá magát a 10g-re való átállásra, úgyhogy ezzel most kell foglalkoznom.
Ismerkedem ezzel a 10g-vel, egész jónak tunik ez is, a minta XML és XSD fájlok szépen muködnek is. Igenám, de nekem nem mintafájlokkal kell dolgoznom, hanem azokkal, amelyek valahonnan jönnek, és olyanok, amilyenek. Ránézésre teljesen szépek, minden valid, az Oracle-be is be tudom olvasni, csak épp a lekérdezés nem megy (pl. az existsNode() és az extractvalue()).
 
A ténylegesen használandó XML és XSD fájlok elég bonyolultak, de egy általam alkotott egyszeru példán meg tudom mutatni, mi a problémám.
 
Ami működik:
 
y1.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <xsd:element name="purchaseOrder" type="PurchaseOrderType"/>
 <xsd:element name="comment" type="xsd:string"/>
 <xsd:complexType name="PurchaseOrderType">
  <xsd:sequence>
   <xsd:element ref="comment" minOccurs="0"/>
   <xsd:element name="shipTo" type="USAddress"/>
  </xsd:sequence>
  <xsd:attribute name="orderDate" type="xsd:date"/>
 </xsd:complexType>
 <xsd:complexType name="USAddress">
  <xsd:sequence>
   <xsd:element name="name" type="xsd:string"/>
   <xsd:element name="street" type="xsd:string"/>
   <xsd:element name="city" type="xsd:string"/>
   <xsd:element name="state" type="xsd:string"/>
   <xsd:element name="zip" type="xsd:decimal"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:schema>

 
y1.xml

<?xml version="1.0"?>
<purchaseOrder xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="y1.xsd" orderDate="1967-08-13">
 <comment>Hurry, my lawn is going wild!</comment>
 <shipTo>
  <name>Alice Smith</name>
  <street>123 Maple Street</street>
  <city>Mill Valley</city>
  <state>CA</state>
  <zip>90952</zip>
 </shipTo>
</purchaseOrder>


Ami nem (illetve csak félig-meddig):

y2.xsd

<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://xyz.hu/test" targetNamespace="http://xyz.hu/test">
 <xsd:element name="purchaseOrder" type="tns:PurchaseOrderType"/>
 <xsd:element name="comment" type="xsd:string"/>
 <xsd:complexType name="PurchaseOrderType">
  <xsd:sequence>
   <xsd:element ref="tns:comment" minOccurs="0"/>
   <xsd:element name="shipTo" type="tns:USAddress"/>
  </xsd:sequence>
  <xsd:attribute name="orderDate" type="xsd:date"/>
 </xsd:complexType>
 <xsd:complexType name="USAddress">
  <xsd:sequence>
   <xsd:element name="name" type="xsd:string"/>
   <xsd:element name="street" type="xsd:string"/>
   <xsd:element name="city" type="xsd:string"/>
   <xsd:element name="state" type="xsd:string"/>
   <xsd:element name="zip" type="xsd:decimal"/>
  </xsd:sequence>
 </xsd:complexType>
</schema>

 
y2.xml

<?xml version="1.0"?>
<tns:purchaseOrder xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://xyz.hu/test" xsi:schemaLocation="http://xyz.hu/test y2.xsd" orderDate="1967-08-13">
 <tns:comment>Hurry, my lawn is going wild!</tns:comment>
 <shipTo>
  <name>Alice Smith</name>
  <street>123 Maple Street</street>
  <city>Mill Valley</city>
  <state>CA</state>
  <zip>90952</zip>
 </shipTo>
</tns:purchaseOrder>


Tehát  második az elsőtől abban tér el, hogy használ egy tns nevu name space-t. Az XmlSpy mindkettot validnak mondja, sot az oracle XMLIsValid() függvény is.

Az y1.xsd-ből az oracle az alábbi resource-ot hozza létre:
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:oraxdb="http://xmlns.oracle.com/xdb" oraxdb:flags="311" oraxdb:schemaURL="y1.xsd" oraxdb:schemaOwner="XMLTEST" oraxdb:numProps="10">
  <xsd:element name="purchaseOrder" type="PurchaseOrderType" oraxdb:propNumber="2860" oraxdb:global="true" oraxdb:SQLName="purchaseOrder" oraxdb:SQLType="PurchaseOrderType242_T" oraxdb:SQLSchema="XMLTEST" oraxdb:memType="258" oraxdb:defaultTable="purchaseOrder244_TAB" oraxdb:defaultTableSchema="XMLTEST"/>
  <xsd:element name="comment" type="xsd:string" oraxdb:propNumber="2861" oraxdb:global="true" oraxdb:SQLName="comment" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="comment243_TAB" oraxdb:defaultTableSchema="XMLTEST"/>
  <xsd:complexType name="PurchaseOrderType" oraxdb:SQLType="PurchaseOrderType242_T" oraxdb:SQLSchema="XMLTEST">
    <xsd:sequence>
      <xsd:element ref="comment" minOccurs="0" oraxdb:propNumber="2863" oraxdb:global="false" oraxdb:SQLName="comment" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="false" oraxdb:JavaInline="false"/>
      <xsd:element name="shipTo" type="USAddress" oraxdb:propNumber="2864" oraxdb:global="false" oraxdb:SQLName="shipTo" oraxdb:SQLType="USAddress241_T" oraxdb:SQLSchema="XMLTEST" oraxdb:memType="258" oraxdb:SQLInline="true" oraxdb:MemInline="false" oraxdb:JavaInline="false"/>
    </xsd:sequence>
    <xsd:attribute name="orderDate" type="xsd:date" oraxdb:propNumber="2862" oraxdb:global="false" oraxdb:SQLName="orderDate" oraxdb:SQLType="DATE" oraxdb:memType="12"/>
  </xsd:complexType>
  <xsd:complexType name="USAddress" oraxdb:SQLType="USAddress241_T" oraxdb:SQLSchema="XMLTEST">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string" oraxdb:propNumber="2865" oraxdb:global="false" oraxdb:SQLName="name" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
      <xsd:element name="street" type="xsd:string" oraxdb:propNumber="2866" oraxdb:global="false" oraxdb:SQLName="street" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
      <xsd:element name="city" type="xsd:string" oraxdb:propNumber="2867" oraxdb:global="false" oraxdb:SQLName="city" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
      <xsd:element name="state" type="xsd:string" oraxdb:propNumber="2868" oraxdb:global="false" oraxdb:SQLName="state" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
      <xsd:element name="zip" type="xsd:decimal" oraxdb:propNumber="2869" oraxdb:global="false" oraxdb:SQLName="zip" oraxdb:SQLType="NUMBER" oraxdb:memType="2" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>


az y2.xsd-ből pedig:
 
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://xyz.hu/test" targetNamespace="http://xyz.hu/test" xmlns:oraxdb="http://xmlns.oracle.com/xdb" oraxdb:flags="311" oraxdb:schemaURL="y2.xsd" oraxdb:schemaOwner="XMLTEST" oraxdb:numProps="10">
  <xsd:element name="purchaseOrder" type="tns:PurchaseOrderType" oraxdb:propNumber="2900" oraxdb:global="true" oraxdb:SQLName="purchaseOrder" oraxdb:SQLType="PurchaseOrderType282_T" oraxdb:SQLSchema="XMLTEST" oraxdb:memType="258" oraxdb:defaultTable="purchaseOrder284_TAB" oraxdb:defaultTableSchema="XMLTEST"/>
  <xsd:element name="comment" type="xsd:string" oraxdb:propNumber="2901" oraxdb:global="true" oraxdb:SQLName="comment" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:defaultTable="comment283_TAB" oraxdb:defaultTableSchema="XMLTEST"/>
  <xsd:complexType name="PurchaseOrderType" oraxdb:SQLType="PurchaseOrderType282_T" oraxdb:SQLSchema="XMLTEST">
    <xsd:sequence>
      <xsd:element ref="tns:comment" minOccurs="0" oraxdb:propNumber="2903" oraxdb:global="false" oraxdb:SQLName="comment" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="false" oraxdb:JavaInline="false"/>
      <xsd:element name="shipTo" type="tns:USAddress" oraxdb:propNumber="2904" oraxdb:global="false" oraxdb:SQLName="shipTo" oraxdb:SQLType="USAddress281_T" oraxdb:SQLSchema="XMLTEST" oraxdb:memType="258" oraxdb:SQLInline="true" oraxdb:MemInline="false" oraxdb:JavaInline="false"/>
    </xsd:sequence>
    <xsd:attribute name="orderDate" type="xsd:date" oraxdb:propNumber="2902" oraxdb:global="false" oraxdb:SQLName="orderDate" oraxdb:SQLType="DATE" oraxdb:memType="12"/>
  </xsd:complexType>
  <xsd:complexType name="USAddress" oraxdb:SQLType="USAddress281_T" oraxdb:SQLSchema="XMLTEST">
    <xsd:sequence>
      <xsd:element name="name" type="xsd:string" oraxdb:propNumber="2905" oraxdb:global="false" oraxdb:SQLName="name" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
      <xsd:element name="street" type="xsd:string" oraxdb:propNumber="2906" oraxdb:global="false" oraxdb:SQLName="street" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
      <xsd:element name="city" type="xsd:string" oraxdb:propNumber="2907" oraxdb:global="false" oraxdb:SQLName="city" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
      <xsd:element name="state" type="xsd:string" oraxdb:propNumber="2908" oraxdb:global="false" oraxdb:SQLName="state" oraxdb:SQLType="VARCHAR2" oraxdb:memType="1" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
      <xsd:element name="zip" type="xsd:decimal" oraxdb:propNumber="2909" oraxdb:global="false" oraxdb:SQLName="zip" oraxdb:SQLType="NUMBER" oraxdb:memType="2" oraxdb:SQLInline="true" oraxdb:MemInline="true" oraxdb:JavaInline="true"/>
    </xsd:sequence>
  </xsd:complexType>
</schema>

 
Az eltérés a kettő működése között az, hogy az y1.xml-re vonatkozó
 
select existsNode(OBJECT_VALUE,'/purchaseOrder/shipTo/name')
from
"purchaseOrder244_TAB";

 
kérdés 1-et, az y2.xml-re vonatkozó
 
select existsNode(OBJECT_VALUE,'/purchaseOrder/shipTo/name')
from
"purchaseOrder284_TAB";

 
pedig 0-t ad vissza.
 
Hasonlóan, az y1.xml-re vonatkozó
select extractvalue(object_value,'/purchaseOrder/shipTo/name')
from
"purchaseOrder244_TAB";

kérdés visszaadja a tényleges "Alice Smith" értéket,  míg az y2.xmlre vonatkozó
select extractvalue(object_value,'/purchaseOrder/shipTo/name')
from
"purchaseOrder284_TAB";

kérdés pedig üres eredményt hoz.
 
A hasonló kérdések, amelyek a '/purchaseOrder/@orderDate' -re, ill. a '/purchaseOrder/comment'-re vonatkoznak, mindkét esetben jó eredményt adnak.

Sajnos én elég kezdő vagyok ebben a dologban, annak ellenére, hogy már 2 éve fut az Oracle8i-re írott xml-t oracle-be pakoló alkalmazásom.
 
Van valakinek elképzelése, mit kellene csinálnom, hogy az y2.xsd/y2.xml párost is rendesen le tudjam kérdezni?
Tudom, kicsit bonyolult a dolog, de a mellékelt fájlok segítségével könnyen rekonstruálni lehet az esetet, és hátha ebbol rögtön látja valaki, mi itt a helyzet.
 
Előre is köszönök minden ötletet!
 
 

 
intruder Creative Commons License 2004.10.05 0 0 6
De még mennyire hogy érhetnek... :)
Előzmény: mma (5)
mma Creative Commons License 2004.10.01 0 0 5
Azzal tulajdonképpen már kész vagyok, de még persze érhetnek meglepetések a project során. Jó tudni, hogy fordulhatok valakihez, ha elakadnék.
Előzmény: intruder (4)
intruder Creative Commons License 2004.10.01 0 0 4
Mármint az xml feldolgozásban...
Előzmény: intruder (3)
intruder Creative Commons License 2004.10.01 0 0 3
Az se rossz... lehet, hogy tudok benne segíteni, ha szükséges...
Előzmény: mma (2)
mma Creative Commons License 2004.09.30 0 0 2
Kösz a választ! Egyelőre sajnos ezt a kérdést félre kell tennem, a megrendelő ugyanis az XML-be való exportot anyagi okok miatt csak jövőre fogja kérni, sőt idén még az Oracle9-re történő átállás is elmarad, úgyhogy most csak XML olvasással kell foglalkoznom, azzal is csak 8i-ben :(
Előzmény: intruder (1)
intruder Creative Commons License 2004.09.29 0 0 1

select-el, sqlx függvényekkel nem tudod az encoding attribútumot beletenni.

 

Ha úgy készíted az xml-t, hogy nincs még prolog, akkor hozzá lehetne konkatenálni egyet.

Ha van prolog, akkor már nem megy a konkat, mert abból nem sül ki jó...

Szerintem a legjobb lenne, ha csinálsz egy pl/sql tárolt eljárást, ami az encoding-ot beállítja megfelelőre. Ez lehetne a sys.xmldom csomaggal, de az xmldom.setCharset() fgv. sajnos nem állítja be a megfelelő encoding értéket valami hiba folytán. Ez persze az újabb xdk-val változhat. Megcsinálhatod viszont java tárolt eljárással is, a file kezelésre már úgyis csináltál egyet.

Előzmény: mma (-)
mma Creative Commons License 2004.06.11 0 0 0
Persze a html formázásba is hiba csúszott. A végét megismétlem normálisan, mert az a lényeg.

A hibák, amelyeket nem tudok megoldani:

1. A prologba nem tudom betenni az encoding attribútumot.
2. A DATATRANSFER elembe nem tudom beletenni a szükséges snd és rcv attribútumokat.

Van valakinek ötlete, hogy lehet ezeket megoldani?

Előre is köszönök minden segítséget.

Előzmény: mma (-)
mma Creative Commons License 2004.06.11 0 0 topiknyitó
Remélem, van olyan közöttetek, aki használ ORACLE XML funkciókat. Én most ismerkedek vele, és úgy tűnik, hogy működik. Tudok SQL queryből XML fájlt készíteni, és XML fájlt SQL-lel olvasni. Aprócska problémáim azért vannak, például most a következő.
Szeretnék egy ilyen XML fájlt csinálni SQL queryvel:

<?xml version="1.0" encoding="ISO-8859-1"?>
<DATATRANSFER snd="egyik ceg" rcv="masik ceg">
<MSG MessageID="uzenet azonosito">
<tenyleges_adatok/>
</MSG>
</DATATRANSFER>

A prolog, vagyis a <?xml version="1.0" encoding="ISO-8859-1"?> sor nélkül símán megy:


select
xmlelement("DATATRANSFER",xmlattributes('egyik ceg' as "snd",'masik ceg' as "rcv"),
xmlelement("MSG",xmlattributes('uzenet azonosito' as "MessageID"),
xmlelement("tenyleges_adatok")
)
)
from dual ;

A prologot a SYS_XMLGEN() függvénnyel próbáltam rárakni, kis hibákkal sikerült is. A parancs:


select
sys_xmlgen(
xmlelement("MSG",xmlattributes('uzenet azonosito' as "MessageID"),
xmlelement("tenyleges_adatok")
),
xmlformat.createformat('DATATRANSFER')
).getclobval()
from dual;

Az eredmény:


<?xml version="1.0"?>
<DATATRANSFER>
<MSG MessageID="uzenet azonosito"><tenyleges_adatok></tenyleges_adatok></MSG></DATATRANSFER>

A hibák:

1. A prologba nem tudom betenni az encoding attribútumot.
2. A DATATRANSFER elembe nem tudom beletenni a szükséges snd és rcv attribútumokat.

Van valakinek ötlete, hogy lehet ezeket megoldani?

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!