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'
К сожалению, для меня не очевидно, как решить проблему, потому что не очевидно, чего вы пытаетесь достичь.