XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.
-
Upload
melissa-warner -
Category
Documents
-
view
219 -
download
1
Transcript of XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.
![Page 1: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/1.jpg)
XML and Oracle 8i : A How-To Guide for PL/SQL Users
NoCOUG, 14th Nov’00, 1.00 pm
Eashwar Iyer
![Page 2: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/2.jpg)
Goals and Objectives
• Understand the basics of XML, DTD and XSL
• Look at some of the relevant tools offered by Oracle
• Understand the basic usage of these tools with the help of examples
• See the examples in action
![Page 3: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/3.jpg)
Some Basics Revisited
XML - eXtensible Markup Language
It describes data in an easily readable format but without any indication of how the data is to be displayed (as in HTML). It is a database-neutral
and device-neutral format; data marked up in XML
can be targeted at different devices using eXtensible
Style Language (XSL).
![Page 4: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/4.jpg)
Some Basics Revisited
Example of XML<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href=“example_1.xsl”?> <Houserules> <Houserule id="1"> <WakeUp> 05.00 hrs </WakeUp> <HitBed> 00.00 hrs </HitBed> </Houserule> </Houserules>
![Page 5: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/5.jpg)
Some Basics Revisited
DTD – Document Type Definition
Is a set of rules or grammar that is defined by us to
construct our own XML rules. In other words, a DTD
provides the rules that define the elements and
structure of our new language.
![Page 6: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/6.jpg)
Example of DTD
Some Basics Revisited
<Houserules> <Houserule> <WakeUp> </WakeUp> <HitBed> </HitBed> </Houserule> </Houserules>
Note: The actual DTD syntax is covered in later slides
![Page 7: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/7.jpg)
Some Basics Revisited
XSL – eXtensible Style Language
At its most basic, XSL provides a capability similar to a "mail merge." The style sheet contains a template
of the desired result structure, and identifies data in
the source document (XML) to insert into this template.
![Page 8: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/8.jpg)
Example of XSL
Some Basics Revisited
<?xml version='1.0'?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <HTML> <BODY> <h1>HOUSE RULES</h1> <xsl:for-each select="Houserules/Houserule"> <b>Rule # <xsl:value-of select="@id" /> </b> <i>Wake up at : <xsl:value-of select="WakeUp" /> </i> <i>Hit the bed at : <xsl:value-of select="HitBed" /> </i> </xsl:for-each> </BODY> </HTML> </xsl:template></xsl:stylesheet>
Some Basics Revisited
![Page 9: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/9.jpg)
Output of the example in a browser
Some Basics Revisited
![Page 10: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/10.jpg)
XML in Oracle
Oracle8i with JServer (version used for the examples in this
presentation is 8.1.6)
Oracle XML Developer’s Kit (XDK) (among the many tools available in the XDK, the
following are used for the examples here) Oracle XML Parser for PL/SQL Oracle XSU (XML SQL Utility)
XMLGEN Package
![Page 11: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/11.jpg)
• Read data from the database and convert them into an XML document.
• Output the XML documents in the appropriate device (we will restrict ourselves to displaying the output in a browser).
• Read XML document and insert the data contained in it into the table in the database.
A Round-Trip Example
What do we want to achieve?
To enjoy all the benefits provided by the Oracle tools, the least we should be able to do, to get started, are:
![Page 12: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/12.jpg)
A Round-Trip Example
Lets consider a Zip code table with the
following structure:Column NameColumn Name Data Type Data Type WidthWidth
State_AbbreviationState_Abbreviation Character 2 Character 2
ZipCodeZipCode Character Character 5 5
Zip_Code_ExtnZip_Code_Extn Character Character 4 4
CityCity Varchar2 50 Varchar2 50
![Page 13: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/13.jpg)
First Cut DTD
<!ELEMENT mappings (state_abbreviation, zipcode, zip_code_extn, city)>
<!ELEMENT state_abbreviation (#PCDATA)><!ELEMENT zipcode (#PCDATA)><!ELEMENT zip_code_extn (#PCDATA)><!ELEMENT city (#PCDATA)>
<!ELEMENT Zipcodes (mappings)+>
![Page 14: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/14.jpg)
Extending the DTD
Among the many keywords available for defining
DTDs, let’s look at the “Attribute” keyword.
<!ELEMENT zipcode (#PCDATA)><!ATTLIST zipcode
zipcode CDATA #REQUIRED ><!ELEMENT zip_code_extn (#PCDATA)><!ELEMENT city (#PCDATA)><!ATTLIST city
city CDATA #REQUIRED >
<!ELEMENT Zipcodes (mappings)+><!ELEMENT mappings (state_abbreviation, zipcode, zip_code_extn, city)><!ELEMENT state_abbreviation (#PCDATA)>
<!ATTLIST state_abbreviationstate (AL | AK | AZ | AR | AS | CA | CO | CT) #REQUIRED >
![Page 15: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/15.jpg)
XSL for the XML/DTD
<xsl:template match="/"> <HTML> <BODY> <TABLE BORDER="2"> <TR> <TD>Zipcode</TD> <TD>Zip Code Extn</TD> <TD>City</TD> <TD>State Abbreviation</TD> </TR>
Contd.......
<?xml version='1.0'?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
![Page 16: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/16.jpg)
<xsl:for-each select="Zipcodes/mappings"> <TR> <TD><xsl:value-of select="ZIPCODE"/></TD> <TD><xsl:value-of
select="ZIP_CODE_EXTN"/></TD> <TD><xsl:value-of select="CITY"/></TD> <TD><xsl:value-of
select="STATE_ABBREVIATION"/></TD> </TR> </xsl:for-each> </TABLE> </BODY> </HTML> </xsl:template></xsl:stylesheet>
XSL for the XML/DTD
![Page 17: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/17.jpg)
D E M O N S T R A T I O N
Implementing the example in
Oracle
![Page 18: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/18.jpg)
Code: To Create an XML Doc from a Table in the Database
DATA
XML DOCUMENT
PL/SQLCODE
DISPLAY IN BROWSER
![Page 19: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/19.jpg)
declare xmlString CLOB := null; amount integer:= 1000; position integer := 1; charString varchar2(1000); fileHandle UTL_FILE.FILE_TYPE; begin --we want the result document root to be
"Zipcodes" --to follow our DTD structure xmlgen.setRowsetTag('Zipcodes'); --we want the row element to be named
"mappings" to follow our --DTD structure Contd.......
Code: To Create an XML Doc from a Table in the Database
![Page 20: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/20.jpg)
xmlgen.setRowTag('mappings'); --open the file in "write" mode fileHandle := utl_file.fopen('d:\
test','XML_FOR_ZIPCODES.XML', 'w');--set the ERROR tag to be ERROR_RESULTS xmlgen.setErrorTag('ERROR_RESULT'); --set the id attribute in the ROW element to be
Record - so that it --shows the number of records fetched xmlgen.setRowIdAttrName('Record'); --do not use the null indicator to indicate nullness xmlgen.useNullAttributeIndicator(false);
Contd.......
Code: To Create an XML Doc froma Table in the Database
![Page 21: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/21.jpg)
--attach the stylesheet to the result document xmlgen.setStyleSheet('XSL_FOR_ZIPCODES.XSL');--this gets the XML out - the 0 indicates no DTD in the
generated --XML document. A value of 1 will provide a DTD description
in --the XML document xmlString := xmlgen.getXML('select * from
scott.zipcodes',0); --now open the lob data. dbms_lob.open(xmlString, dbms_lob.lob_readonly); loop -- read the lob data dbms_lob.read(xmlString,amount,position,charString);
Contd.......
Code: To Create an XML Doc from a Table in the Database
![Page 22: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/22.jpg)
utl_file.put_line(fileHandle, charString);
position := position + amount; end loop; exception when no_data_found then -- end of fetch, free the lob dbms_lob.close(xmlString); dbms_lob.freetemporary(xmlString); xmlgen.resetOptions; utl_file.fclose(fileHandle); when others then xmlgen.resetOptions; end;
Code: To Create an XML Doc from a Table in the Database
![Page 23: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/23.jpg)
The XML Document in a Browser
![Page 24: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/24.jpg)
create or replace procedure db2xml2browser is--------------xmlgen.setStyleSheet('\MYDIR\XSL_FOR_ZIPCODES.XSL'); --------------htp.prn(ltrim(charString,' '));--------------
Code: To Create an XML Doc “on the fly” from a Table in the Database
![Page 25: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/25.jpg)
The XML Document in a Browser invoked via iAS
![Page 26: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/26.jpg)
DATA
XML DOCUMENT
PL/SQLCODE
Code: To Read Data from an XML Doc into a Table in the Database
![Page 27: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/27.jpg)
Code: To Read Data from an XML Doc into a Table in the Database
declare charString varchar2(80); finalStr varchar2(4000) := null; rowsp integer; v_FileHandle UTL_FILE.FILE_TYPE; begin -- the name of the table as specified in our DTD xmlgen.setRowsetTag('Zipcodes'); -- the name of the data set as specified in our
DTD xmlgen.setRowTag('mappings');
Contd.......
![Page 28: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/28.jpg)
-- for getting the output on the screen dbms_output.enable(1000000);-- open the XML document in read only mode v_FileHandle := utl_file.fopen('d:\
test','XML_NEW_CITIES.XML', 'r'); loop begin utl_file.get_line(v_FileHandle, charString); exception when no_data_found then utl_file.fclose(v_FileHandle); exit; end; Contd.......
Code: To Read Data from an XML Doc into a Table in the Database
![Page 29: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/29.jpg)
dbms_output.put_line(charString); if finalStr is not null then finalStr := finalStr || charString; else finalStr := charString; end if; end loop; -- for inserting the XML data into the table rowsp :=
xmlgen.insertXML('scott.zipcodes',finalStr); dbms_output.put_line('Insert Done '||
to_char(rowsp)); xmlgen.resetOptions; end;
Code: To Read Data from an XML Doc into a Table in the Database
![Page 30: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/30.jpg)
The Sample XML Doc
<?xml version = '1.0'?><Zipcodes> <mappings Record="4"> <STATE_ABBREVIATION>CA</STATE_ABBREVIATION> <ZIPCODE>94301</ZIPCODE> <CITY>Palo Alto</CITY> </mappings> <mappings Record="5"> <STATE_ABBREVIATION>CO</STATE_ABBREVIATION> <ZIPCODE>80323</ZIPCODE> <ZIP_CODE_EXTN>9277</ZIP_CODE_EXTN> <CITY>Boulder</CITY> </mappings></Zipcodes>
![Page 31: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/31.jpg)
New Records in the Table
SQL> select * from zipcodes; ST ZIPCO ZIP_ CITY-- ----- ---- ------- -------------CA 95123 6111 San JoseCA 95234 SunnyvaleAK 72701 FayettevilleCA 94301 Palo AltoCO 80323 9277 Boulder
![Page 32: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/32.jpg)
Conclusion
• We saw the definition of XML, DTD and XSL.
• We acquainted ourselves with the names of some of the Oracle Tools available for handling XML.
• We saw these tools in action with some examples.• The topics covered in this session are building blocks for the complex, real life requirements of enterprises.• The available Oracle tools are extremely powerful and geared to handle all these complexities.
![Page 33: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/33.jpg)
AQ&Q U E S T I O N SQ U E S T I O N SA N S W E R SA N S W E R S
![Page 34: XML and Oracle 8i : A How-To Guide for PL/SQL Users NoCOUG, 14 th Nov’00, 1.00 pm Eashwar Iyer.](https://reader033.fdocuments.in/reader033/viewer/2022051516/56649e435503460f94b37328/html5/thumbnails/34.jpg)
About
Quovera, Redwood Shores, CA, is a Full Service Provider (FSP) that delivers e-business solutions in e-time designed for dot-com, Fortune 1000 and high-growth companies. With over five years proven experience, Quovera provides a single source for Business Modeling, Integrated e-Services, ASP and Strategic Business Process Outsourcing. http://www.quovera.com
For the Presentation and White Paper download, visithttp://www.quovera.com/forum/index.html
NoCOUG 2000, 14th Nov’00, 1.00pm