Обновите SQL с двумя таблицами в Oracle - PullRequest
5 голосов
/ 08 февраля 2011

У меня есть 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?

Ответы [ 3 ]

11 голосов
/ 08 февраля 2011

Может быть, что-то вроде

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)
4 голосов
/ 08 февраля 2011

В 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

Примечание. Этот запрос будет работать в Oracle только в том случае, если (S_TEKLIF.BAYI_KOD, S_TEKLIF.HESAP_NO) уникален (поэтому обновление не будет неоднозначным, и каждая строка из S_MUSTERI будетобновляться не более одного раза).

2 голосов
/ 08 февраля 2011

Ваш оператор обновления не соответствует правильному синтаксису.В операторе обновления нет предложения from.Он должен соответствовать формату

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

См. Эту документацию по обновлению: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10007.htm#i2067715

...