3

私は oracle データベース 9ir2 で作業しています。いくつかのテーブルをカスタム形式のタグを使用して xml ファイルに変換する必要があります。

例: emp テーブルのいくつかの列から XML を生成し、次のように「myxmlfile.xml」という名前のファイルを生成します。

<?xml version="1.0" encoding="UTF-8"?>
<entity-engine-xml>
 <myxmlfile
  EMPNO="8401"
  ENAME="JHON"
  HIREDATE="1988-12-30"
  SAL="5000"
  DEPTNO="10"

 />
 <myxmlfile
    ...
 />
 <myxmlfile
    ...
 />
</entity-engine-xml>
  1. 上記のタグを使用してカスタム XML ファイルを生成する方法、およびユーザーがそうする必要があるたびに、つまり pl/sql を使用して「ユーザー要求ごと」に、Oracle XML 関数を使用してカスタマイズされた目的のタグを出力する方法.
  2. xmltype を varchar2 に変換する方法 ??? ... to_char() 関数は XMLtype を char に変換できません。
  3. クライアント側で XML ファイルを作成する最も簡単な方法は何ですか?

注: ユーザー アプリケーションは、古い oracle 開発者ツール forms6i によって構築された XP PC で実行されています。

4

1 に答える 1

3

XMLELEMENTなどでこれを行います。

select xmlelement("entity-engine-xml",
                  xmlagg(
                    xmlelement(
                      "myxmlfile", 
                      xmlattributes(empno as "EMPNO",
                                    ename as "ENAME",
                                    to_char(hiredate, 'yyyy-mm-dd') as "HIREDATE",
                                    sal as "SAL",
                                    deptno as "DEPTNO"
                                    )
                    )
                  )
                 ).getclobval()
  from emp;

.

how to convert xmltype to varchar2 ???

これにはgetStringVal関数があります。つまり、上記の例を参照してくださいgetClobvalgetstringval()同等のものがあります。

編集: スプーリング:

set trims on feedback off heading off long 50000 linesize 32767 pagesize 0
col c format a32767
spool c:\temp\foo.xml
select xmlelement("entity-engine-xml",
                  xmlagg(
                    xmlelement(
                      "myxmlfile", 
                      xmlattributes(empno as "EMPNO",
                                    ename as "ENAME",
                                    to_char(hiredate, 'yyyy-mm-dd') as "HIREDATE",
                                    sal as "SAL",
                                    deptno as "DEPTNO"
                                    )
                    )
                  )
                 ).transform(xmltype('<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>
</xsl:stylesheet>')) c
  from emp;
spool off
于 2013-01-22T22:50:11.403 に答える