0

これは、「CARS」という名前のサンプルテーブルです。これは、はるかに大きなテーブルの一部にすぎません。

MODEL              ID

Ferrari             1
Mustang             2
Taurus              3

CARS_XMLという名前の新しいテーブルを作成し、各行をCARSから単一のXMLタイプの列に変更し、カーソルを使用してテーブルCARSからデータをフェッチし(各行の値を挿入する代わりに)、新しいテーブルCARS_XMLを作成します。結果のテーブルには、のXMLタグがあり、CAR最初のテーブルの値がXMLタグ内の正しい場所に挿入されているため、CARS_XMLからのselect*は次のようになります。MODELIDCARS

< CAR>< MODEL>Ferrari< /MODEL>< ID>1< /ID>< /MODEL>< /CAR>
< CAR>< MODEL>Mustang< /MODEL>< ID>2< /ID>< /MODEL><  /CAR>
< CAR>< MODEL>Taurus< /MODEL>< ID>3< /ID>< /MODEL>< /CAR>

まず、aを宣言しsys.xmltypeて定義しますか?定義する場合はどうすればよいですか?

4

2 に答える 2

3

必要なときにテーブルからオンザフライxmlで生成するのではなく、別のテーブルに配置する理由。xmlCARS

テーブルに別のテーブルからの制約があるため、これを言っている理由CARS。一貫性を維持するために、そのCAR_XMLで複製する必要があります。

もう1つの理由は、テーブルにデータを挿入するたびにCARS、同じものをテーブルに挿入する必要があるためです。したがって、FLYのテーブルCAR_XMLからデータを取得する関数を記述します。CARSそうでない場合は、CARSテーブルでトリガーを作成します。insert update deleteオンの場合は、テーブルで同じことを行いCAR_XMLます。

create table cars(model varchar2(200),id number);
insert into cars values('Ferrari',1);
insert into cars values('Mustang',2);
insert into cars values('Taurus',3);


SELECT XMLElement("CAR", 
                        XMLElement("MODEL",c.model) ,
                        XMLElement("ID", c.id)
                 ) AS "RESULT" 
FROM cars c;

出力

< CAR>< MODEL>Ferrari< /MODEL>< ID>1< /ID>< /MODEL>< /CAR>
< CAR>< MODEL>Mustang< /MODEL>< ID>2< /ID>< /MODEL><  /CAR>
< CAR>< MODEL>Taurus< /MODEL>< ID>3< /ID>< /MODEL>< /CAR>
于 2012-11-24T16:41:54.977 に答える
1

完全にチェックすることはできませんが、以下のスクリプトはあなたが探しているものを実行すると思います。しかし、あなたがやろうとしていることは問題があるようです。おそらく将来のある時点で、このxmlをどこかに送信する予定です。私にとって、データをxmlに変換するのに最適なタイミングは、テーブルに残してスペースを占有するのではなく、送信するときです。データベース。また、2つの異なる場所に同じデータがありますが、これは通常、データベース設計では悪いことです。

CREATE TABLE cars
(model varchar2(30)
,id   number(3));

INSERT INTO cars
(model
,id)
VALUES ( 'Ferrari',1);

INSERT INTO cars
(model
,id)
VALUES ( 'Mustang',2);


INSERT INTO cars
(model
,id)
VALUES ( 'Taurus',3);

CREATE TABLE cars_xml
(xml_data xmltype);


INSERT INTO cars_xml
SELECT xmlelement("CAR",xmlelement("MODEL",c.model)||xmlelement("ID",c.id))
FROM cars c;
于 2012-11-24T16:40:29.250 に答える