2011-02-08 22 views
5

Ho uno SQL come questoAggiornamento SQL con due tavoli in Oracle

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 

Ma i ottenendo un errore come questo

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: 

Dov'è il ERROR?

+0

Il 'UPDATE' multi-tabella funziona su SQL Server, ma non su Oracle. – pascal

+0

stai facendo questo in una procedura? –

+3

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

risposta

11

Forse qualcosa di simile

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

Sei assolutamente giusto Pascal. –

3

In Oracle sintassi per aggiornare un punto di vista è diverso da SQL * la sintassi del server. In Oracle si potrebbe rilasciare la seguente query:

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 

Nota: Questa query funziona solo in Oracle se (S_TEKLIF.BAYI_KOD, S_TEKLIF.HESAP_NO) è unico (in modo che l'aggiornamento non sarà ambiguo e ogni riga da S_MUSTERI verrà aggiornato, al massimo una volta) .