SQL ORACLE ORA-00969: отсутствует ключевое слово ON? - PullRequest
8 голосов
/ 28 сентября 2011

У меня есть две разные таблицы: Table_a и Table_b, обе имеют одинаковые столбцы PartNo и Material_Desc.Я хочу, чтобы Material_Desc в Table_b обновлял Material_Desc в Table_a, когда PartNo равны.Это мой запрос

MERGE INTO Table_b 
USING ( SELECT t1.rowid AS rid
               , t2.Material_Desc
        FROM Table_b t1 
           JOIN Table_a t2 
           ON Table_b.PartNo = Table_a.PartNo ) 
ON rowid = rid 
WHEN MATCHED THEN 
    UPDATE 
    SET Table_a.Material_Desc = Table_b.Material_Desc;

Я знаю, что Oracle не поддерживает объединения для оператора обновления, поэтому я попытался выполнить вышеуказанный запрос.Тем не менее он дает мне ORACLE ORA-00969: отсутствует ключевое слово ON ошибка

Ответы [ 3 ]

8 голосов
/ 18 апреля 2013

Вы можете поставить "(" и ")". Так что пишите:

ON ( rowid = rid )

2 голосов
/ 28 сентября 2011

Прежде всего, проблема синтаксиса: при слиянии с использованием подзапроса необходимо присвоить ему псевдоним. Но что более важно, вам не нужно использовать подзапрос.

MERGE INTO Table_a USING Table_b ON (Table_a.PartNo = Table_b.PartNo) 
WHEN MATCHED THEN UPDATE SET Table_a.Material_Desc = Table_b.Material_Desc

Прежде всего, вы должны поместить таблицу, которую хотите обновить, в часть INTO. Во-вторых, объединение в подвыбор и объединение строк не принесет вам никакой пользы, о которой я могу подумать.

0 голосов
/ 28 сентября 2011

, возможно, не так эффективно, как оценка слияния, но должно выполнять работу:

update table_b tb
set tb.Material_Desc = (select ta.Material_Desc 
                        from   table_a ta 
                        where  ta.PartNo = tb.PartNo
                        and    rownum = 1
                       )
where tb.rowid in (
                  SELECT t1.rowid                       
                    FROM Table_b t1 
                        , Table_a t2 
                    WHERE  t1.PartNo = t2.PartNo
                   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...