2012-04-27 65 views
0

我想動態創建的元素創建XML元素,我想下面的查詢,但它給我這個錯誤:SQL16031N XQuery language feature using syntax "element {$first} { "Crockett" }, element last {"Johnson" } } })" is not supported要在飛行

能否請你幫我出。

XQUERY 
let $first := concat('first','') 
return (element book { 
    attribute isbn {"isbn-0060229357" }, 
    element title { "Harold and the Purple Crayon"}, 
    element author { 
     element {$first} { "Crockett" }, 
     element last {"Johnson" } 
    } 
}) 
+0

哪個XQuery引擎? – tohuwawohu 2012-04-27 08:27:16

+0

錯誤代碼似乎來自[DB2](http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/topic/com.ibm.db2.luw.messages.sql.doc/doc/msql16031n。 HTML)。 – 2012-04-27 10:51:03

回答

0

試試這個:

let $first := xs:QName('first') 
return (element book { 
    attribute isbn {"isbn-0060229357" }, 
    element title { "Harold and the Purple Crayon"}, 
    element author { 
     element {$first} { "Crockett" }, 
     element last {"Johnson" } 
    } 
}) 
+0

Hi Dave, 它給了我類似的錯誤: SQL16031N使用語法元素{$ first} {「Crockett」},元素last {「Johnson」}}})「的語法特性不支持。 – Puru 2012-04-30 11:17:00

+0

嗨Dave,請你讓我知道如何使用上面的語法來創建元素,因爲它給我不支持的錯誤。 – Puru 2012-07-26 05:37:07

0

看來,DB2 XQuery不支持computed element constructors與動態計算的名稱。如果可能名稱的數量很小並且事先已知,則可以通過列出所有可能性來避開該限制。由於DB2似乎並不支持switch要麼,我們將不得不與if/else級聯做到這一點:

XQUERY 
let $first := 'firstA' 
return (element book { 
    attribute isbn {"isbn-0060229357" }, 
    element title { "Harold and the Purple Crayon"}, 
    element author { 
     if($first eq 'firstA') 
      then element firstA { "Crockett" } 
     else if($first eq 'firstB') 
      then element firstB { "Crockett" } 
     else if($first eq 'firstC') 
      then element firstC { "Crockett" } 
     else(), 
     element last {"Johnson" } 
    } 
})