« Oracle de XMLDB #23 - Relational dataをXMLへ #6 | トップページ | Oracle de XMLDB #25 - Relational dataをXMLへ #7のおまけ »

2008年2月21日 (木)

Oracle de XMLDB #24 - Relational dataをXMLへ #7

リレーショナルデータをXMLへ変換するシリーズもひとまず最終回ということで、最後は、Oracleデータベース側でXMLTypeインスタンスへ変換して、クライアントではXMLTypeインスタンスを受け取るだけの例を一つ。
環境は前回の記事を見てもらうとして早速試してみる。

Xmldb24_project Xmldb24_project_property


バックナンバー:
Oracle de XMLDB #18 - Relational dataをXMLへ #1

Oracle de XMLDB #19 - Relational dataをXMLへ #2
Oracle de XMLDB #20 - Relational dataをXMLへ #3
Oracle de XMLDB #21 - Relational dataをXMLへ #4
Oracle de XMLDB #22 - Relational dataをXMLへ #5
Oracle de XMLDB #23 - Relational dataをXMLへ #6


以下の例は、SQL/XMLとOracleが提供しているXQuery関数 ora:view()を利用し、リレーショナルデータからXMLTypeインスタンスを作るまでをOracleデータベース側で行い、クライアントではXMLTypeインスタンスを受け取るだけというもの。

package jp.macdeoracle.sample;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.jdbc.OracleResultSet;
import oracle.jdbc.pool.OracleDataSource;

import oracle.xdb.XMLType;


public class Table2Xml2
{
public Table2Xml2()
throws SQLException
{
OracleDataSource ods;
ods = new OracleDataSource();
ods.setURL(
"jdbc:oracle:thin:scott/tiger@192.168.1.20:1521:lampeye"
);

Connection conn = ods.getConnection();
Statement stmt = conn.createStatement();
OracleResultSet rs = (OracleResultSet)stmt.executeQuery(
"SELECT "
+ "XMLROOT("
+ "XMLQuery("
+ "'<ROWSET> {"
+ " for $d in ora:view(\"EMP\") "
+ " order by $d"
+ " return $d"
+ "} </ROWSET>'"
+ "RETURNING CONTENT), VERSION '1.0') "
+ "FROM dual"
);
DatabaseMetaData meta = conn.getMetaData();
System.out.println(meta.getDatabaseProductVersion());
System.out.println(meta.getDriverName()+":"+meta.getDriverVersion());
while(rs.next()) {
System.out.println(
"=======================\n"
+((XMLType)rs.getObject(1)).getStringVal()
);
}
rs.close();
stmt.close();
conn.close();
}

public static void main(String[] args) throws SQLException
{
Table2Xml2 dbXml = new Table2Xml2();
}
}


実行結果は以下の通り。

Oracle Database 11g Release 11.1.0.0.0 - Production
Oracle JDBC driver:10.1.0.3.0
=======================
<?xml version="1.0"?>
<ROWSET>
<ROW>
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>1980-12-17</HIREDATE>
<SAL>800</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW>
<EMPNO>7499</EMPNO>
<ENAME>ALLEN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-02-20</HIREDATE>
<SAL>1600</SAL>
<COMM>300</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7521</EMPNO>
<ENAME>WARD</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-02-22</HIREDATE>
<SAL>1250</SAL>
<COMM>500</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7566</EMPNO>
<ENAME>JONES</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-04-02</HIREDATE>
<SAL>2975</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW>
<EMPNO>7654</EMPNO>
<ENAME>MARTIN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-09-28</HIREDATE>
<SAL>1250</SAL>
<COMM>1400</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7698</EMPNO>
<ENAME>BLAKE</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-05-01</HIREDATE>
<SAL>2850</SAL>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7782</EMPNO>
<ENAME>CLARK</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-06-09</HIREDATE>
<SAL>2450</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW>
<EMPNO>7839</EMPNO>
<ENAME>KING</ENAME>
<JOB>PRESIDENT</JOB>
<HIREDATE>1981-11-17</HIREDATE>
<SAL>5000</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW>
<EMPNO>7844</EMPNO>
<ENAME>TURNER</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-09-08</HIREDATE>
<SAL>1500</SAL>
<COMM>0</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7900</EMPNO>
<ENAME>JAMES</ENAME>
<JOB>CLERK</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-12-03</HIREDATE>
<SAL>950</SAL>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7902</EMPNO>
<ENAME>FORD</ENAME>
<JOB>ANALYST</JOB>
<MGR>7566</MGR>
<HIREDATE>1981-12-03</HIREDATE>
<SAL>3000</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW>
<EMPNO>7934</EMPNO>
<ENAME>MILLER</ENAME>
<JOB>CLERK</JOB>
<MGR>7782</MGR>
<HIREDATE>1982-01-23</HIREDATE>
<SAL>1300</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW>
<EMPNO>9999</EMPNO>
<ENAME>ほげ</ENAME>
<JOB>ENGINEER</JOB>
<MGR>7566</MGR>
<HIREDATE>2008-01-01</HIREDATE>
<SAL>2500</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
</ROWSET>

プロセスが終了コード0で終了しました。


いろいろな方法があるので悩みそうな気もするなぁ。。。。やっぱり。。。

|

トラックバック


この記事へのトラックバック一覧です: Oracle de XMLDB #24 - Relational dataをXMLへ #7:

コメント

コメントを書く