2017-06-01 16 views
1

sap hanaのxml文字列にデータを格納することは可能ですか?誰かが私にこれがどのように行われたかの例を教えてもらえますか?基本的に、ノードの列の部分文字列を格納し、その結果をselect文の別のテーブルに接続しようとしています。インターネット上の資料はあまりありませんので、どんな助けでも大歓迎です。ありがとう。 HANA 2 XML関数(XMLEXTRACTXMLEXTRACTVALUE)で始まるテーブルからxml文字列にデータを格納する

答えて

1

が利用可能である:使用可能な特定のXML機能は存在しなかったHANA2前https://www.youtube.com/watch?v=tMTn0i0fpT0

+0

私は自分の答えを書いている間にラースがちょうど彼の答えを訂正したのを見ます(それはLarsから間違った答えを見つけるのは想像もしません;-))。多分誰かがこの例に興味を持っているので私は私の答えを残すでしょう。 –

2

HANA 2.0以降、関数XMLEXTRACTおよびXMLEXTRACTVALUEを参照して、XMLを含む列値の解析を非常に限定的にサポートしています。

XML文書から値を動的に抽出し、他のテーブルに結合する例を示します。 警告:この例は、各文書にman項目がどのように含まれているかを正確に把握している場合にのみ機能します。存在しない項目にアクセスするときに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" 
関連する問題