2017-06-01 37 views
1

是否可以将数据存储在sap hana中的xml字符串中。有人能给我举例说明这是如何完成的。基本上试图在节点中存储列的子串,并将结果连接到select语句中的另一个表。互联网上没有太多的材料,所以任何帮助将不胜感激。谢谢。将数据存储在表中的xml字符串中

回答

1

与HANA 2个XML功能(XMLEXTRACTXMLEXTRACTVALUE)开始可用:https://www.youtube.com/watch?v=tMTn0i0fpT0

HANA2之前有没有可用的特定的XML功能。

+0

我看到拉尔斯刚刚纠正了他的答案,而我写了我的答案(很难想象从拉尔斯找到了错误的答案,因此;-))。我会留下我的答案,因为也许有人对这个例子感兴趣。 –

2

从HANA 2.0开始,解析包含XML的列值的支持非常有限,请参阅函数XMLEXTRACT和XMLEXTRACTVALUE。

下面是一个以某种方式从XML文档中动态提取值并将它们连接到其他表的示例。 但是警告:这个例子只有在你确切地知道每个文档包含多少人物的情况下才有效。我期望在访问不存在的项目时获得NULL,但是我收到错误。所以,也许有人可以改进,或者目前功能有限。

drop table "XMLExample"; 
create column table "XMLExample" 
("DocID" NVARCHAR(10), 
    "Doc" nvarchar(5000)); 

insert into "XMLExample" ("DocID", "Doc") values 
    ('1', 
    '<Doc> 
    <Item><ID>1</ID><Prod>A</Prod><Quantity>10</Quantity></Item> 
    <Item><ID>2</ID><Prod>B</Prod><Quantity>12</Quantity></Item> 
    </Doc>' 
    ); 
insert into "XMLExample" ("DocID", "Doc") values 
    ('2', 
    '<Doc> 
    <Item><ID>1</ID><Prod>A</Prod><Quantity>1</Quantity></Item> 
    <Item><ID>2</ID><Prod>C</Prod><Quantity>3</Quantity></Item> 
    </Doc>' 
    ); 

drop table "Products"; 
create column table "Products" 
("ProdID" NVARCHAR(10), 
"Price" DECIMAL(10,2)); 

insert into "Products" ("ProdID", "Price") values ('A', '13.54'); 
insert into "Products" ("ProdID", "Price") values ('B', '3.00'); 
insert into "Products" ("ProdID", "Price") values ('C', '5.30'); 


select "Items".*, "Price", "Price" * "Quantity" "Total" from 
(
    SELECT "DocID", 
     XMLEXTRACTVALUE(
     "XMLExample"."Doc", 
     '/Doc/Item[' || "SERIES"."ELEMENT_NUMBER" || ']/ID' 
    ) "ItemID", 
     XMLEXTRACTVALUE(
     "XMLExample"."Doc", 
     '/Doc/Item[' || "SERIES"."ELEMENT_NUMBER" || ']/Prod' 
    ) "ProdID", 
    XMLEXTRACTVALUE(
     "XMLExample"."Doc", 
     '/Doc/Item[' || "SERIES"."ELEMENT_NUMBER" || ']/Quantity' 
    ) "Quantity" 
    FROM "XMLExample", 
     SERIES_GENERATE_INTEGER(1, 0, 2) "SERIES" -- replace 2 with your max. number of Items 
) "Items" 
inner join "Products" 
    on "Products"."ProdID" = "Items"."ProdID"  
Order by "DocID", "ItemID" 
相关问题