【问题标题】:Update XMLTYPE in Oracle table with values from it's fields使用其字段中的值更新 Oracle 表中的 XMLTYPE
【发布时间】:2011-07-07 17:21:45
【问题描述】:

我在 Oracle 10gR2 中有一个现有表,我在其中添加了一个 XMLTYPE 列。现在,我需要用一个 XML 填充该字段,该 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 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:

作为参考,下面是 Transact Sql 中的工作更新

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

非常感谢您的帮助

【问题讨论】:

    标签: oracle ora-00933 xmltype


    【解决方案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
    

    如果没有,您可以发布表定义吗?

    【讨论】:

    • 是的……马上!比 TSQL 语法简单得多。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多