【问题标题】:Update SQL with two tables in Oracle用 Oracle 中的两个表更新 SQL
【发布时间】:2011-06-23 12:14:00
【问题描述】:

我有一个这样的 sql

UPDATE A
SET A.TEMSILCI_KOD = 4
FROM S_MUSTERI A, S_TEKLIF B
WHERE A.TEMSILCI_KOD = 9
AND B.BAYI_KOD = 17
AND A.HESAP_NO = B.HESAP_NO

但我收到这样的错误

Error starting at line 8 in command:
UPDATE A
SET A.TEMSILCI_KOD = 4
FROM S_MUSTERI A, S_TEKLIF B
WHERE A.TEMSILCI_KOD = 9
AND B.BAYI_KOD = 17
AND A.HESAP_NO = B.HESAP_NO
Error at Command Line:9 Column:22
Error report:
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:

ERROR 在哪里?

【问题讨论】:

  • 多表 UPDATE 适用于 SQL Server,但不适用于 Oracle。
  • 你是在程序中这样做的吗?
  • RTFM,没有FROM

标签: sql oracle sql-update ora-00933


【解决方案1】:

在 Oracle 中更新视图的语法与 SQL*Server 的语法不同。在 Oracle 中,您可以发出以下查询:

UPDATE (SELECT A.TEMSILCI_KOD
          FROM S_MUSTERI A, S_TEKLIF B
         WHERE A.TEMSILCI_KOD = 9
           AND B.BAYI_KOD = 17
           AND A.HESAP_NO = B.HESAP_NO)
   SET TEMSILCI_KOD = 4

注意:此查询仅在 (S_TEKLIF.BAYI_KOD, S_TEKLIF.HESAP_NO) 是唯一的情况下才在 Oracle 中有效(这样更新不会有歧义,并且来自 S_MUSTERI 的每一行将最多更新一次)。

【讨论】:

    【解决方案2】:

    可能是这样的

    UPDATE S_MUSTERI
    SET TEMSILCI_KOD = 4
    WHERE TEMSILCI_KOD = 9
    AND EXISTS (SELECT 1 FROM S_TEKLIF B
    WHERE S_MUSTERI.HESAP_NO = B.HESAP_NO
    AND B.BAYI_KOD = 17)
    

    【讨论】:

      【解决方案3】:

      您的更新语句没有遵循正确的语法。 update 语句中没有 from 子句。它应该遵循格式

      Update <table> 
         set <column> = <value> 
       where <conditions>
      

      请参阅此文档以了解更新: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10007.htm#i2067715

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 2016-06-06
        • 1970-01-01
        相关资源
        最近更新 更多