取得したxmlメッセージに取り組んでいます。XML を読み取って 4 つの異なるテーブルに格納する必要があります。
これを処理する最良の方法は何ですか。XMLスキーマが変更された場合、新しい列が追加されるか、列が削除または名前変更される可能性があるとしましょう...
この疎結合をどのように行うことができるでしょうか。XML またはデータベースへの変更は、コードの変更を必要としませんか?
ありがとう、
一度 Oracle に格納された XML をどのように使用するつもりなのかわかりませんが、監査目的で格納するだけであれば、XML をバージョン番号といくつかの日付と共に CLOB フィールドに格納できます。別の参照テーブルで、xml バージョン番号をその dtd (および作成日/変更日) と関連付けます。
Oracle 11G を使用している場合は、PL/SQL プロシージャで XMLTYPE 変数を作成し、extract() 関数を使用して、フィールドにする XML ドキュメントの部分のみを取得できます。
XMLTYPE 型の PL/SQL 変数を宣言した後、XMLTYPE.CREATEXML( ) 関数を使用して XMLTYPE 変数を作成します。
V_INPUT_XML := XMLTYPE.CREATEXML(V_TAB.INPUT_MESSAGE);
extract() PL/SQL 関数は XMLTYPE を返します。私は getclobval() を使用して XMLTYPE を VARCHAR に変換しました。
--V_OUTPUT_XML is set by a result of the extract() function
--on an XMLTYPE
V_OUTPUT_STR := v_output_xml.getclobval();
少なくともこれにより、設定しているフィールドへのパスが変更された場合にのみ PL/SQL を変更する必要があります。フィールド外の XML ドキュメントを変更しても (フィールドへの XPATH に影響を与えない限り)、PL/SQL を変更する必要はありません。