Showing posts with label oracle. Show all posts
Showing posts with label oracle. Show all posts

Tuesday, December 8, 2009

Querying an Oracle database using XSLT for dummies

In this post I will explain how you can query an Oracle database using XSLT technology and Xalan as your XML processor.

Requirements:
If you decide that you don't want to use an XML editor you will have to download Xalan and add the necessary libraries to your classpath before processing the XSLT file. If you decide to take that route you can follow the first steps in this tutorial, which explains how to setup your environment without an XML editor.

Tutorial

1. Open Oxygen and create a new document of type XSLT
2. Copy and paste the XSLT code below:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:sql="org.apache.xalan.lib.sql.XConnection"
 extension-element-prefixes="sql">
 <xsl:output method="html" />
 <xsl:template match="/">
  <xsl:variable
   name="movies"
   select="sql:new('oracle.jdbc.driver.OracleDriver'
   ,'jdbc:oracle:thin:@ipaddress:sid','username','password')" />
  <xsl:variable name="streaming" select="sql:disableStreamingMode($movies)" />
  <xsl:variable
   name="queryResults"
   select="sql:query($movies,'SELECT movie, actor FROM movie')" />
  <html>
   <head><title>Oracle Result Set</title></head>
   <body style="font-family: sans-serif;">
    <table border="1" cellpadding="5">
     <tr>
      <xsl:for-each select="$queryResults/sql/metadata/column-header">
       <th><xsl:value-of select="@column-label" /></th>
      </xsl:for-each>
     </tr>
     <xsl:apply-templates select="$queryResults/sql/row-set/row" />
    </table>
   </body>
  </html>
  <xsl:value-of select="sql:close($movies)" />
 </xsl:template>
 <xsl:template match="row">
  <tr><xsl:apply-templates select="col" /></tr>
 </xsl:template>
 <xsl:template match="col">
  <td><xsl:value-of select="text()" /></td>
 </xsl:template>
</xsl:stylesheet>
3. Be sure to make your changes accordingly
4. After pasting your code in the text area click on the XSLT debugger button as shown in the image below:







5.
Click on the Run button



6. VoilĂ ! Now look at the result, and here is what I got from my XSLT:













MOVIEACTOR
Indiana Jones and the Last CrusadeAlison Doody
Indiana Jones and Raiders of the Lost ArkHarrison Ford
Indiana Jones and Raiders of the Lost ArkDenholm Elliott
Indiana Jones and the Last CrusadeSean Connery
Indiana Jones and Raiders of the Lost ArkJonn Rhys-Davies

Friday, December 5, 2008

Configure JBoss for Oracle

  1. Oracle and JBoss use the same port by default, 8080. If you are using Oracle and JBoss on the same server, modify the http port for Oracle to something other than 8080 (i.e, 8081). Skip this step if you are running Oracle on a different server.
  2. Login to Oracle using SQLPLUS as the SYSTEM user and enter the following script command:


    BEGIN
    dbms_xdb.sethttpport(’8081′);
    END;
    /

    Locate the online_help file in the Oracle \server folder, right click, select properties, and modify the url to:

    http://127.0.0.1:8081/apex/wwv_flow_help.show_help?p_flow_id=4500&p_step_id=1000

    Locate the postDBCreation file in the Oracle server\config\log folder, open it and modify the following line:

    URL=http://127.0.0.1:8081/htmldb/wwv_flow_help.show_help

  3. JBoss needs to know where the Oracle jdbc driver classes are located. This can be done by either, copying the Oracle jdbc archive file to the server default lib folder. Search and locate the ojdbc14.jar file in the Oracle \jdbc\lib folder. Copy the ojdbc14.ja file to the JBoss \server\default\lib folder.
  4. Define a datasource in JBOSS to access a specific Oracle database instance. Copy the /docs/examples/jca/oracle-ds.xml file from the jboss directory to the /server/default/deploy folder in JBoss. Open a text editor (e.g., WordPad or xCode) and modify the file as follows.






  5. OracleDS
    jdbc:oracle:thin:@localhost:1521:xe
    oracle.jdbc.driver.OracleDriver
    homedirectbank
    bank

    Oracle9i



  6. Modify the standardjbosscmp-jdbc.xml configuration file in the JBoss /server/default/conf folder. Add the following and sub-tags to the tag. These tags map the datasource, OracleDS, to the data mapping, Oracle9i, defined further down in this file. The data mapping tag defines how the specific Oracle database types map to the corresponding Java data types.







  7. java:/OracleDS




Tuesday, May 27, 2008

SQL date manipulating in Oracle

Today I wrote a script that would take the values I had from my Calendar table, which contained all months with their start date and end date for the year of 2008, and insert them back for the year of 2007. My first solution didn't work so well and threw an error. I came to learn that the TO_YMINTERVAL function doesn't work because it doesn't handle leap year.
The function that did the job right was ADD_MONTH.
Here goes my script:

INSERT INTO calendar
(calendar_id,
month,
full_month,
begin_date,
end_date)
SELECT calendar_s1.nextval,
month,
full_month,
add_months(begin_date,-12),
add_months(end_date,-12)
FROM calendar;

Try that out and let me know if you have other simpler solutions for a similar problem.