这是一个名为'CARS'的示例表,它只是更大表的一部分。
MODEL ID
Ferrari 1
Mustang 2
Taurus 3
我想创建一个名为CARS_XML的新表,将每行从CARS更改为单个XML类型
列,使用游标从表CARS中获取数据(而不是插入每行的值)以形成新表CARS_XML。结果表包含CAR
,MODEL
和ID
的XML标记,第一个表CARS
的值插入XML标记内的正确位置,以便选择来自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
并定义它,如果是,我该怎么做?
答案 0 :(得分:3)
为什么您希望将xml
放在另一个表格中,而不是在需要时从xml
表格生成CARS
。
我之所以这样说是因为CARS
表有来自另一个表的约束。你需要在该CAR_XML上复制以保持一致性。
另一个原因是,无论何时将数据插入CARS
表,都需要将其插入CAR_XML
。所以编写一个函数,从FLY上的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>
答案 1 :(得分:1)
我认为下面的脚本会做你想要的,虽然我无法完全检查。然而,你想要做的似乎是有问题的。大概在未来的某个时候你将把这个xml发送到某个地方,对我来说,将数据转换为xml的最佳时间就是当你想要发送它时,而不是将它留在表中,占用你的空间数据库。您现在在两个不同的地方也拥有相同的数据,这通常是数据库设计中的一件坏事。
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;