Ошибка новичка Oracle: ORA-00904 Неверный идентификатор при использовании «case when» - PullRequest
1 голос
/ 20 сентября 2011

Я получаю ошибку в запросе. Этот запрос в порядке и возвращает данные (селекторы и rownums для нумерации страниц):

select *
from (select a.*, rownum rnum
from (select id_edition, id_document, name, extension, creation_date, url, 
(select inscription_date from edition_student_d0 where id_edition = 12345 and id_third =     12345) inscription_date
from upd_edition_doc_d0
where id_edition = 1071591
order by creation_date desc) a
where rownum <= 10 )
where rnum >= 1

Теперь я пытаюсь включить «случай, когда» и получить URL-адрес только при некоторых обстоятельствах, поэтому я делаю эти изменения, в том числе блок дела:

select *
from (select a.*, rownum rnum
from (select id_edition, id_document, name, extension, creation_date, 
(select inscription_date from edition_student_d0 where id_edition = 12345 and id_third = 12345) inscription_date,
case
when trunc(inscription_date + 90) <= trunc(sysdate) then null
else url
end url
from upd_edition_doc_d0
where id_edition = 1071591
order by creation_date desc) a
where rownum <= 10 )
where rnum >= 1

Oracle запускает эту ошибку:

ORA-00904: "INSCRIPTION_DATE": invalid identifier

Полагаю, это потому, что я запрашиваю inscription_date и использую его на том же уровне запросов, но я не знаю, как с этим справиться.

Кроме того, как я могу сделать то, что я пытаюсь сделать? Я имею в виду, получение URL только при определенных условиях.

Кто-нибудь может помочь?

Заранее спасибо.

1 Ответ

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

Нельзя ссылаться на псевдоним на том же уровне запроса.

Вы можете заменить подзапрос ...

select *
from (select a.*, rownum rnum
  from (select id_edition, id_document, name, extension, creation_date, 
           (select inscription_date from edition_student_d0 where id_edition = 12345 and  id_third = 12345) inscription_date,
           case when trunc((select inscription_date from edition_student_d0 where id_edition = 12345 and  id_third = 12345) + 90) <= trunc(sysdate) then null
             else url
           end as url
           from upd_edition_doc_d0
           where id_edition = 1071591
           order by creation_date desc) a
   where rownum <= 10 )
where rnum >= 1

ИЛИ переместить регистр на один уровень вверх.

select *
from (select a.*, 
      case when trunc(inscription_date + 90) <= trunc(sysdate) then null
       else url
      end as url,
      rownum rnum
  from (select id_edition, id_document, name, extension, creation_date, 
           (select inscription_date from edition_student_d0 where id_edition = 12345 and  id_third = 12345) inscription_date
           from upd_edition_doc_d0
           where id_edition = 1071591
           order by creation_date desc) a
   where rownum <= 10 )
where rnum >= 1
...