0

这是一个名为“CARS”的示例表,它只是一个更大的表的一部分。

MODEL              ID

Ferrari             1
Mustang             2
Taurus              3

我想创建一个名为 CARS_XML 的新表,将每一行从 CARS 更改为单个 XML 类型列,使用游标从表 CARS 中获取数据(而不是插入每行的值)以形成新表 CARS_XML。生成的表具有 XML 标记CARMODEL并且ID第一个表的值CARS插入到 XML 标记内的正确位置,因此 select * from CARS_XML 将如下所示:

< 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>

首先,我是否声明sys.xmltype并定义它,如果是,我该怎么做?

4

2 回答 2

3

为什么要将您的放在另一个表中,而不是在需要时从表中即时xml生成。xmlCARS

我之所以这么说是因为CARS表具有来自另一个表的约束。您需要在该 CAR_XML 上复制以保持一致性。

另一个原因是,每当您将数据插入CARS表中时,您都需要将相同的数据插入到表中CAR_XML。所以编写一个从CARSFLY 表中获取数据的函数。如果不是,则在 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 回答