2017-06-01 97 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" 
相關問題