Oracle 11g(11.1.0.7.0)を使用しており、クエリのXMLファイルを作成する必要があります。私はフォーム6でこのファイルを使用していますが、ユーザーはフォームのボタンを押している間にXMLファイルを作成できるようにしたいので、XMLデータを使用してCLOBファイルを作成するPL/SQLパッケージがあります。サーバーとForms6iを使用して、このファイル行を1行ずつ読み取り(UTL_FILE.FOPENで読み取り、UTL_FILE.GET_LINEを行で)、TEXT_IO.PUT_LINEを使用してクライアントコンピューターにファイルを書き込みます。これは素晴らしい動作をしますが、XMLファイルに問題があります。これで、次のようになります(値は例です!):
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ShoeShop>
<Article>
<Artnumber>12345</Artnumber>
<Artdesc>Black Shoes</Artdesc>
</Article>
<Article>
<Artnumber>12346</Artnumber>
<Artdesc>White Shoes</Artdesc>
</Article>
</ShoeShop>
わかった。次のようなXMLファイルを作成したいのですが、方法がわかりません。私はSQL/PLSQLを初めて使用し、2か月まで学習しています。その前に、Progress4GLを使用しました。そのため、進行中は、自分がやりたいことを「ネスト」と呼んでいますが、SQL/PLSQLでそれを実現する方法がわかりません。XMLファイルの例:取得方法:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<ShoeShop>
<Article="12345">
<Artdesc>Black Shoes</Artdesc>
</Article="12345">
<Article="12346">
<Artdesc>White Shoes</Artdesc>
</Article="12346">
</ShoeShop>
XMLファイルを作成するためのコードスニペットは、最初の例のように見えます。
PROCEDURE XML_TO_CLOB( pi_Query IN VARCHAR2,
pi_ParentNode IN VARCHAR2,
pi_ChildNode IN VARCHAR2 ) IS
qryCtx DBMS_XMLGEN.ctxHandle;
cResult CLOB;
BEGIN
-- Create new Context for the Query
qryCtx := DBMS_XMLGEN.newContext( pi_Query );
-- Set Parent and Child Node
DBMS_XMLGEN.setRowSetTag( qryCtx, pi_ParentNode );
DBMS_XMLGEN.SetRowTag( qryCtx, pi_ChildNode );
-- setNullHandling to show Tag also when the value is NULL
DBMS_XMLGEN.setNullHandling( qryCtx, DBMS_XMLGEN.EMPTY_TAG );
-- getXML in CLOB
cResult := DBMS_XMLGEN.getXML( qryCtx );
-- Put encoding to the "Header"
cResult := REPLACE( cResult, '<?xml version="1.0"?>', '<?xml version="1.0" encoding="ISO-8859-1" ?>' );
-- Close Context
DBMS_XMLGEN.closeContext( qryCtx );
-- Write the CLOB to a file on the server to work with the data in Forms 6i
DBMS_XMSLPROCESSOR.CLOB2FILE( cResult, 'ExampleDir', 'Example.xml' );
END;
どうもありがとう、
サラ