RA-00904 Ошибка неверного идентификатора, даже если существует имя столбца

Я выполняю запрос оракула в sqldeveloper:

merge into invoices c using (select CUSTOMER_ID, INVOICE_NUMBER, INVOICE_DATE from dual where INVOICE_NUMBER = '123'
and CUSTOMER_ID = '456' and INVOICE_DATE = '19-APR-12') cd
on (c.INVOICE_NUMBER = cd.INVOICE_NUMBER)
  when not matched then
        insert (c.CUSTOMER_ID, c.INVOICE_NUMBER, c.INVOICE_DATE)
        values ('987', '654','179-APR-12')

Я продолжаю получать недействительный идентификатор RA-00904 для столбца INVOICE_DATE RA-00904, даже если этот столбец существует. Я проверил, запустив команду description invoices и затем скопировав имя столбца:

describe invoices;
Name             
----------------
CUSTOMER_ID      
INVOICE_NUMBER   
INVOICE_DATE   

Что тут происходит?

РАЗРЕШАЮЩАЯ СПОСОБНОСТЬ


Вадим и Джастин правы. Я исправил проблему, заменив dual именем таблицы:

merge into invoices c using (select CUSTOMER_ID, INVOICE_NUMBER, INVOICE_DATE from invoices where INVOICE_NUMBER = '123'
    and CUSTOMER_ID = '456' and INVOICE_DATE = '19-APR-12') cd
    on (c.INVOICE_NUMBER = cd.INVOICE_NUMBER)
      when not matched then
            insert (c.CUSTOMER_ID, c.INVOICE_NUMBER, c.INVOICE_DATE)
            values ('987', '654','179-APR-12')

2 ответа

Решение

В USING оговорка, вы делаете SELECT колонн CUSTOMER_ID, INVOICE_NUMBER, INVOICE_DATE из таблицы DUAL, Эта таблица имеет только один столбец, DUMMYотсюда и ошибка.

Проблема, кажется, с запросом в вашем USING пункт. CUSTOMER_ID, INVOICE_NUMBER, а также INVOICE_DATE все недействительные идентификаторы, потому что ни один из них не существует в DUAL Таблица.

select CUSTOMER_ID, INVOICE_NUMBER, INVOICE_DATE 
  from dual 
 where INVOICE_NUMBER = '123'
   and CUSTOMER_ID = '456' 
   and INVOICE_DATE = '19-APR-12'

К сожалению, для меня не очевидно, как решить проблему, потому что не очевидно, чего вы пытаетесь достичь.

Другие вопросы по тегам