首页 文章

如何通过从pl / sql中的另一个表中获取数据来创建XML类型的新表

提问于
浏览
0

这是一个名为'CARS'的示例表,它只是一个更大的表的一部分 .

MODEL              ID

Ferrari             1
Mustang             2
Taurus              3

我想创建一个名为CARS_XML的新表,将每行从CARS更改为单个XML类型列,使用游标从表CARS中获取数据(而不是插入每行的值)以形成新表CARS_XML . 结果表具有 CARMODELID 的XML标记,第一个表 CARS 的值插入XML标记中的正确位置,以便来自CARS_XML的select *将如下所示:

< 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 并定义它,如果是,我该怎么做?

2 回答

  • 3

    为什么要将 xml 放在另一个表中,而不是在需要时从 CARS 表生成 xml .

    之所以我说这是因为 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;
    

    OUTPUT

    < 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

    我认为下面的脚本会做你想要的,虽然我不能完全检查它 . 然而,你想要做的似乎是有问题的 . 大概在未来的某个时候你将把这个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;
    

相关问题