AWS RDS上のOracle XML DBにクエリーを投げる

| コメントをどうぞ

前記事 AWS RDS上のOracle XML DBに複数のxmlデータを投入する で登録された8つのxmlデータに対してクエリーで検索してみる。

SQLはOracle XML DBを使用したXMLとリレーショナル・データの格納、問合せ、およびアクセス の中のxmldb_trg.zipファイルをダウンロードし、XQuery03b.sqlの条件を修正した。
実際のSQLは以下のとおりです。

SELECT XMLQuery('/PurchaseOrder/ShippingInstructions/name' passing object_value returning content) 
FROM PO_SL_BIX_TABLE 
WHERE XMLEXISTS('/PurchaseOrder[Reference="ABANDA-2007040105174348PDT"]' passing object_value);

Oracle SQL Developerで実行すると、1件のnameのみが返ってきます。
oracle-rds-query1

このSQLをそのまま発行するプログラムを実装する。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import oracle.jdbc.OraclePreparedStatement;
import oracle.xdb.XMLType;

public class Query {
    static String url = "jdbc:oracle:thin:@oracle-test.xxx.ap-northeast-1.rds.amazonaws.com:1521:orcl";
    static String uid = "scott";
    static String pwd = "tiger";
    static String sql = "SELECT XMLQuery('/PurchaseOrder/ShippingInstructions/name' passing object_value returning content)"
        + " FROM PO_SL_BIX_TABLE"
        + " WHERE XMLEXISTS('/PurchaseOrder[Reference="ABANDA-2007040105174348PDT"]' passing object_value)";
    public static void main(String[] args) throws Exception {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection conn = DriverManager.getConnection(url, uid, pwd);
        OraclePreparedStatement sqlStatement = (OraclePreparedStatement)conn.prepareStatement(sql);
        ResultSet result = sqlStatement.executeQuery();
        while (result.next()) {
            XMLType xmltype = (XMLType)result.getObject(1);
            String xml = xmltype.getStringVal();
            System.out.println("xml=" + xml);
        }
        conn.close();
    }
}

実行すると、同じようにnameだけが取得できます。

xml=<name>Amit Banda</name>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>