2
以下是一些我想在PL/SQL中重寫的TSQL示例。如何在Oracle中「打開」XML數據
DECLARE @xml XML
SET @xml = '<theRange>
<theRow><First>Bob</First><Last>Smith</Last><Age>30</Age></theRow>
<theRow><First>Sue</First><Last>Jones</Last><Age>34</Age></theRow>
<theRow><First>John</First><Last>Bates</Last><Age>40</Age></theRow>
</theRange>'
;WITH OpenedXML AS (
SELECT r.value('First[1]','varchar(50)') AS First,
r.value('Last[1]','varchar(50)') AS Last,
r.value('Age[1]','int') AS Age
FROM @xml.nodes('//theRange/theRow') AS Row(r)
)
SELECT *
FROM OpenedXML
WHERE Age BETWEEN 30 AND 35
任何人都可以給我一些方向。
嗨文森特。這是一個很好的鏈接(+1),但我不知道該如何解決我的問題。有兩個答覆。一個是SQL Plus解決方案,另一個是PLSQL解決方案,但它使用的是XMLTYPE而沒有給出完整的答案。如果我知道更多,那可能會爲我解決它。 – wcm 2009-10-21 20:48:16
@wcm:我不太瞭解SQL Server,但在這個例子中,synthax看起來很像Oracle。節點= XMLSequence +解壓縮 - 值= extractvalue – 2009-10-21 21:59:19
雅必須明白,MS儘可能地從Oracle中竊取:o)。在TSQL中,您傾向於將解決方案分成不同的步驟。看起來,在Oracle中,你嘗試在單一選擇中做所有事情。在我的代碼中,我將@xml聲明爲XML數據類型,然後設置該值,然後使用我選擇的值。您的代碼在select的主體中顯式創建XMLTYPE。 Oracle解決方案可能更高效,但我認爲TSQL更易於閱讀和理解。這是一個很好的答案。我希望我能不止一次地投票給你。 – wcm 2009-10-22 18:04:33