0

Oracle 10gR2に既存のテーブルがあり、それにXMLTYPE列を追加しました。ここで、このフィールドに、各行のフィールドの値を組み合わせて構成されたXMLを入力する必要がありますが、構文を正しく理解できません。以下は、各行に必要なXMLを生成する正しく機能するSELECTステートメントです。

SELECT XMLELEMENT("TBLOrigs",
  XMLELEMENT("TBLOrig", XMLATTRIBUTES(Field1 AS "Field1"),
  XMLFOREST(Field2 AS "Field2", Field3 AS "Field3", Field4 AS "Field4", Field5 AS "Field5"),
    XMLELEMENT("Dets",
    XMLFOREST(Field6, Field7 AS "Field7")))) AS XmlCol
  FROM TBLOrigin Orig1
WHERE Field1 <= 10

私が試しているUPDATEは次のようなものですが、機能していません。

UPDATE TBLOrigin
SET AUXFIELD = (
  SELECT XMLELEMENT("TBLOrigs",
  XMLELEMENT("TBLOrig", XMLATTRIBUTES(Field1 AS "Field1"),
  XMLFOREST(Field2 AS "Field2", Field3 AS "Field3", Field4 AS "Field4", Field5 AS "Field5"),
    XMLELEMENT("Dets",
    XMLFOREST(Field6, Field7 AS "Field7")))) AS XmlCol
  FROM TBLOrigin Orig1
  WHERE Orig1.Field1 = Orig2.Field1
  AND Orig1.Field2 = Orig2.Field2
  AND Orig1.Field3 = Orig2.Field3
  AND Orig1.Field4 = Orig2.Field4
  AND Orig1.Field5 = Orig2.Field5)
FROM TBLOrigin Orig2
WHERE Field1 <= 10

フィールドから生成されたXMLコンテンツで各行を更新しようとしています。以下のエラーが発生し続けます:

Erro na Linha de Comando:13 Coluna:47
Relatório de Erro:
Erro de SQL: ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:

参考までに、以下はTransactSqlで機能するUPDATEです。

UPDATE dbo.TBLOrigin
SET AuxInfo = (SELECT 
  Field1 as "@Field1",
  Field2 as "Field2", 
  Field3 as "Field3", 
  Field4 as "Field4", 
  Field5 as "Field5", 
  Field6 as "Dets/Field6", 
  Field7 as "Dets/Field7"
FROM dbo.TBLOrigin AS Orig1
WHERE Orig1.Field1 = Orig2.Field1
AND Orig1.Field2 = Orig2.Field2
AND Orig1.Field3 = Orig2.Field3
AND Orig1.Field4 = Orig2.Field4
AND Orig1.Field5 = Orig2.Field5
  FOR XML PATH('TBLOrig'), TYPE, ROOT('TBLOrigs'))
FROM dbo.TBLOrigin Orig2

助けてくれてありがとう

4

1 に答える 1

1

OracleはUPDATE...FROMを実行しません

次は機能しますか?

UPDATE TBLOrigin
SET AUXFIELD = 
       XMLELEMENT("TBLOrigs",
         XMLELEMENT("TBLOrig", XMLATTRIBUTES(Field1 AS "Field1"),
         XMLFOREST(Field2 AS "Field2", Field3 AS "Field3", 
                   Field4 AS "Field4", Field5 AS "Field5"),
         XMLELEMENT("Dets",
            XMLFOREST(Field6, Field7 AS "Field7")))) AS XmlCol
WHERE Field1 <= 10

そうでない場合は、テーブル定義を投稿できますか。

于 2011-03-03T02:32:38.543 に答える