OracleでXMLを活用する
XSQLプログラミング入門

第1回 XSQLの紹介と基本的な使用法
(2ページ)

 

   データの挿入と
 ストアドプロシージャの実行

 <xsql:query>のほかにもXSQLにはさまざまなタグが用意されています。 この章では<xsql:query>タグ以外のタグ数種類を簡単に紹介します。

 まず、<xsql:dml>ではINSERT文の実行、およびストアドプロシージャ(データベース内に格納されているプログラムのこと。OracleではPL/SQLという言語が使われています)を呼び出すことができます。

 例えば次のように、

データベースへのデータの追加

<xsql:dml>
INSERT INTO emp( empno, ename, hiredate, mgr) VALUES
    ({@p_empno}, '{@p_ename}', SYSDATE, {@p_mgr});
</xsql:dml>

としてemp表に新しい列を挿入したり

ストアドプロシージャの呼び出し

<xsql:dml>
hr.increase_sal({@p_empno});
</xsql:dml>

 というようにストアドプロシージャーを呼び出すこともできます。ここでひとつ注意していただきたいのは<xsql:dml>タグでは“;”(セミコロン)が文の最後に必要になっていることです。

 またおなじようにOracle Application Serverで使われていたPL/SQLカートリッジの出力メソッドのhtp.print文を使用することによりプロシージャーからのフィードバックを得ることができます。例えば、

PL/SQLによるストアドプロシージャの定義

CREATE OR REPLACE PROCEDURE HELLO
IS
BEGIN
htp.print("<GREETING>HELLO</GREETING>);
END;

というプロシージャを、XSQLにより

XSQLによるストアドプロシージャの呼び出し

<xsql:include-owa>
HELLO;
</xsql:include-owa>

と呼び出すことにより

ストアドプロシージャの呼び出し結果

<GREETING>HELLO</GREETING>

という出力を得ることができます。この方法はエラー処理などに非常に有効です。

     XSLTスタイルシートとの組み合わせ  

 ここまではデータベース内のデータをXML文書として出力する方法について重点的に説明してきました。この章ではXSQLで得られたXMLを、XSLTというスタイルシート言語を使用してXHTMLに変換し、Webブラウザで表示する方法について説明しましょう。

HTMLを出力するXSQLプログラム

 このように説明すると複雑に聞こえるかもしれませんが、単にHTML形式で出力するだけのことです。この章のポイントはXSLTの説明ではなくXSQLプログラムでXHTMLによる出力ができるということですので、XSLTの詳しい説明についてはこのシリーズ外で説明させていただきたいとおもいます。

  ここでは先ほどのXSQLプログラムをもう少し複雑にしたものを使ってみましょう

スタイルシートを利用するXSQLプログラム

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="emp_info.xsl"?>
<page xmlns:xsql ="urn:oracle-xsql" connection="tkoyama">
<xsql:query
  rowset-element="EMPLOYEES"
  row-element="EMPLOYEE"
  null-indicator="Y">
SELECT E.EMPNO, E.ENAME, E.HIREDATE, M.ENAME MANAGER,
  E.SAL, E.COMM, D.DNAME, D.LOC
FROM EMP E, EMP M, DEPT D
WHERE E.MGR = M.EMPNO AND E.DEPTNO = D.DEPTNO
</xsql:query>
</page>

 2行目で「emp_info.xsl」というファイル名のxsltスタイルシートが指定されているのに注目してください。そのスタイルシートが下記です。

XSLTスタイルシート

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:template match="/">
<HEAD><TITLE>従業員詳細画面</TITLE></HEAD>
<BODY>
<TABLE border="1">
<TR><TD>社員番号</TD><TD>名前</TD><TD>仕事</TD><TD>給与</TD>
<TD>上司</TD><TD>入社日</TD><TD>部署</TD><TD>場所</TD></TR>

<xsl:apply-templates select="//EMPLOYEES/EMPLOYEE"/>
</TABLE>
</BODY>

</xsl:template>
<xsl:template match="//EMPLOYEES/EMPLOYEE">
  <TR>
  <TD><xsl:value-of select="EMPNO"/></TD>
  <TD><xsl:value-of select="ENAME"/></TD>
  <TD><xsl:value-of select="JOB"/></TD>
  <TD><xsl:value-of select="SAL"/></TD>
  <TD><xsl:value-of select="MANAGER"/></TD>
  <TD><xsl:value-of select="HIREDATE"/></TD>
  <TD><xsl:value-of select="DNAME"/></TD>
  <TD><xsl:value-of select="LOC"/></TD>
  </TR>
</xsl:template>
</xsl:stylesheet>

 ここでは予備知識として簡潔にXSLT言語について説明しておきましょう。

 4行目の <xsl:output method="html" encoding="Shift_JIS"/>で、このスタイルシートを利用して出力される文書は、HTML形式でShift_JISエンコードされていると宣言しています。

 次の<xsl:template match="/">で、XSLTプロセッサーはXML出力の<page>に移動します。 それからは単にその下5行(青い文字になっています)を出力バッファに書き込みます。

  その下の<xsl:apply-templates select="//EMPLOYEES/EMPLOYEE"/>では、<EMPLOYEE>タグの出現ごとに<xsl:template match="//EMPLOYEES/EMPLOYEE">を処理します。

 <xsl:template match="//EMPLOYEES/EMPLOYEE">の行では、<EMPLOYEE>の子供タグ: <EMPNO>, <ENAME>, <JOB>, <SAL>, <MANAGER>, <HIREDATE>, <DNAME>, <LOC>の値を、<xsl:value-of>タグで取得し置き換えています。

 このスタイルシートを適用することによって以下のHTML文書が得られます。

出力されたHTML文書

<html>
<HEAD><TITLE>従業員詳細画面</TITLE></HEAD>
<BODY>
<TABLE border="1">
<TR><TD>社員番号</TD><TD>名前</TD><TD>仕事</TD><TD>給与</TD>
<TD>上司</TD><TD>入社日</TD><TD>部署</TD><TD>場所</TD></TR>
<TR><TD>1</TD><TD>佐野力</TD><TD>President</TD><TD>10000</TD>
<TD/><TD>1990-04-01 00:00:00.0</TD><TD>社長室</TD>
<TD>GC18F</TD></TR>
<TR><TD>600</TD><TD>佐藤聡俊</TD><TD>VP</TD><TD>8000</TD>
<TD>佐野力</TD><TD>1995-04-01 00:00:00.0</TD><TD>e-business事業部</TD>
<TD>GC14F</TD></TR>
<TR><TD>50</TD><TD>高橋敦子</TD><TD>Director</TD><TD>6000</TD>
<TD>佐藤聡俊</TD><TD>1991-04-01 00:00:00.0</TD><TD>e-business事業部</TD>
<TD>GC14F</TD></TR>
<TR><TD>1001</TD><TD>本丸達也</TD><TD>Analyst</TD><TD>3200</TD>
<TD>高橋敦子</TD><TD>1997-09-01 00:00:00.0</TD><TD>e-business事業部</TD>
<TD>GC14F</TD></TR>
<TR><TD>1201</TD><TD>砂金信一郎</TD><TD>Analyst</TD><TD>3100</TD>
<TD>高橋敦子</TD><TD>1998-04-01 00:00:00.0</TD><TD>e-business事業部</TD>
<TD>GC14F</TD></TR>
<TR><TD>1401</TD><TD>小山尚彦</TD><TD>Analyst</TD><TD>3000</TD>
<TD>高橋敦子</TD><TD>1999-09-01 00:00:00.0</TD><TD>e-business事業部</TD>
<TD>GC14F</TD></TR>
</TABLE>
</html>

HTMLをWebブラウザで見たところ


     XSQLの動作の仕組み 

 XSQLプログラムは、実際にはサーブレットエンジン上のサーブレットとして動作します。その一連の動きを、図によって簡単に説明しましょう。

  1. ユーザーがemp_info.xsqlを呼び出します
  2. XSQLサーブレットがJDBC接続でデータベースに問い合わせをします
  3. データベースが結果をXSQLサーブレットに返します
  4. XSQLサーブレットが、結果をXML文書とemp_info.xslをXSLTプロセッサーに渡します
  5. XSLTプロセッサーはそのXML文書を、emp_info.xslの命令をもとにXHTMLを生成します
  6. XSQLサーブレットはそのXHTMLをサーブレットエンジンを通じてユーザーのWebブラウザに渡します。

     XSQLの動作環境

 最後に、XSQLの動作環境について簡単に説明しておきます。XSQLサーブレットを動作させるためにはJDKが必要です。さらに、XSQLサーブレットを格納するサーブレットエンジンと、データを格納するデータベース、データベースとXSQLサーブレットをつなぐJDBCドライバーが必要となります。サーブレットエンジン(Applicationサーバー)とデータベースサーバーは同じシステム内で共存していても問題ありません。

XSQLに必要なJDK

  • JDK1.1.8
  • JDK1.2.2
日本語の対応のよりすぐれているJDK1.2.2以上を推奨します。

XSQLがサポートされているサーブレットエンジン
  • Allaire Jrun 2.3.3
  • Apache 1.3.9 と Jserv 1.0 もしくは1.1
  • Apache 1.3.9 と Tomcat 3.1
  • Tomcat 3.1
  • Caucho Resin 1.1
  • Oracle8iLite Web-to-Go Server
  • Oracle Application Server 4.0.8.1(JSPパッチ)

 この中では比較的セットアップの簡単なApacheなしのTomcat3.1を推奨します。8i version8.1.7ではサーブレットをデータベース内に格納するServlet Containerが搭載されXSQLサーブレットはこの内部に格納されます。

XSQLがサポートされているJDBCドライバーとデータベース

  • Oracle8i 8.1.5 と JDBC 1.x プラス nls_charset.zip
  • Oracle8i 8.1.6 と JDBC 1.x プラス nls_charset.zip
  • Oracle8i Lite4.0 と JDBC 1.x プラス nls_charset.zip
  • Oracle8i 8.1.6 と JDBC 2.0 プラス nls_charset.zip

 現在Oracle8でも<xsql:include-owa>以外のタグは使えることがわかっていますがOracle8i 8.1.5とJDBC 1.x以上で使用されることを推奨します。nls_charset.zipは文字のエンコーディングを正しく行うのに必要ですので、JDBCと同様にClasspathに入れておいてください。

 次回はXSQLタグの詳細について掲載させていただきます。

参考サイトおよび文献

  • Oracle Technology Network/XML
  • W3C
  • 「Oracle XSQL Pages and the XSQL Servlet Release Note for version 1.0.0.0」Muench, Steve 2000
  • 「Practical Transformation Using XSLT and XPath, Seventh Edition」 Crane Softwrights Ltd. 2000
  • 「XSLT Programmer's Reference」 Kay, Michael 2000


更新履歴
2000/6/30 公開
2000/6/30 対応バージョンなどについて一部変更


 目次 

 1ページ

 XSQLとは、XML+SQL
   XML形式への出力言語
 XSQLのプログラム例
   XSQLでデータベースを検索する
   引数を用いた動的な検索

 2ページ
 データの挿入とストアドプロシージャの実行
 XSLTスタイルシートとの組み合わせ
   
HTMLを出力するXSQLプログラム
 XSQLの動作の仕組み
 XSQLの動作環境

 

「連載 XSQLプログラミング入門」

 



XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間