这就是我在 ms sql 中的做法
DECLARE @xmlData XML = N'<provinces>
<provinceid>1</provinceid>
<provincename>Queensland</provincename>
<shortcode>QL</shortcode>
<countryid>112</countryid>
</provinces>';
UPDATE rel.mProvince SET ProvinceName = X.provincename, ShortCode = X.shortcode, CountryID = X.countryid FROM rel.mProvince INNER JOIN (SELECT c.value('provinceid[1]','int') [provinceid], c.value('provincename[1]','nvarchar(50)') [provincename], c.value('shortcode[1]','nvarchar(10)') [shortcode], c.value('countryid[1]','int') [countryid] FROM @xmlData.nodes('//provinces') t(c)) X ON rel.mProvince.ProvinceID = X.provinceid WHERE rel.mProvince.ProvinceID=X.provinceid;
现在我想更新 Oracle 中的表 mProvince 下面是更新查询
DECLARE xmlData XMLTYPE = XMLTYPE('<provinces>
<provinceid>1</provinceid>
<provincename>Queensland</provincename>
<shortcode>QL</shortcode>
<countryid>112</countryid>
</provinces>');
UPDATE mProvince
SET ProvinceName = X.provincename,
ShortCode = X.shortcode,
CountryID = X.countryid
FROM mProvince INNER JOIN (SELECT X.*
FROM XMLTABLE('/NewDataSet'
PASSING xmlData
COLUMNS "provinceid" NUMBER PATH 'provinceid',
"provincename" NVARCHAR2(50) PATH 'provincename',
"shortcode" NVARCHAR2(10) PATH 'shortcode',
"countryid" NUMBER PATH 'countryid')) X
ON mProvince.ProvinceID = X.provinceid
WHERE mProvince.ProvinceID=X.provinceid;
这在oracle中失败了,有什么问题。