2011-02-08 613 views
5

两个表我有这样的SQL更新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

+0

多表'UPDATE'适用于SQL Server,但不适用于Oracle。 – pascal

+0

你在做一个程序吗? –

+3

[RTFM](http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_10008.htm#i2067715),没有'FROM'。 – pascal

回答

11

也许像

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) 
+0

你绝对是正确的帕斯卡。 –

3

在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)是唯一的(这样的更新将不会产生歧义和S_MUSTERI每行最多将更新一次) 。