2016-01-02 4 views
-2

Я wrinting подзапрос с ниже запроса, но я получаю сообщение об ошибке, какНедопустимый оператор SQL ошибка

ошибка Invalid оператор SQL

Я не знаю, что здесь не так

select enq.followup_sr_no ColFolSrno,case when enq.followup_sr_no=(select max(followup_sr_no) from xxcus.XXACL_PN_ENQUIRY_FOLLOWUP where cef_mkey=enq.cef_mkey) and enq.activity_id not in (80,40) then 'Edit' else 'View' end ColViewEdit, 

ENQ.FOLLOWUP_TYPE_ID ColFolTypeId,FOL.FOLLOW_TYPE ColFolType,ENQ.PRIORITY_ID ColPrioId,PRI.PRIORITY ColPriority, 
to_char(ENQ.FOLLOWUP_DATE,'dd/MM/yyyy') ColFolUpDt,ENQ.ACTIVITY_ID ColActId,ACT.ACTIVITY ColActivity,ENQ.REMARKS ColComments, 

'Flat-' || (select FP.FLAT_NO FROM xxcus.xxacl_pn_ratecard rc, xxcus.xxacl_pn_flatproj_v fp where RC.FLAT_ID=FP.FLAT_ID and RC.CEF_MKEY=enq.CEF_MKEY and RC.FOLLOWUP_SR_NO=enq.FOLLOWUP_SR_NO) ColPrint, 

to_char(ENQ.NEXT_FOLLOW_UP_DATE,'dd/MM/yyyy') ColNxtFolUpDt,ENQ.NEXT_ACTIVITY_ID ColNxtActId,NACT.ACTIVITY ColNxtActivity, (select RC.FLAT_ID FROM xxcus.xxacl_pn_ratecard rc where RC.CEF_MKEY=enq.CEF_MKEY and RC.FOLLOWUP_SR_NO=enq.FOLLOWUP_SR_NO)FLAT_ID , 

enq.mkey mkey , enq.ATTENDED_BY_MKEY AttendedByMkey , em.user_id User_Id , em.login_name EnqueryBy 

from XXACL_PN_EMPLOYEE_ALL_V em, xxcus.XXACL_PN_ENQUIRY_FOLLOWUP enq, xxcus.XXACL_PN_FOLLOWUP_TYPE_V fol,xxcus.XXACL_PN_PRIORITY_V pri,xxcus.XXACL_PN_ACTIVITY_V act,xxcus.XXACL_PN_ACTIVITY_V nact, xxcus.xxacl_pn_flatproj_v flt 

where ENQ.FOLLOWUP_TYPE_ID = FOL.FOLLOW_TYPE_ID(+) and ENQ.PRIORITY_ID = PRI.PRIORITY_ID(+) and ENQ.ACTIVITY_ID = ACT.ACTIVITY_ID(+) and ENQ.NEXT_ACTIVITY_ID = NACT.ACTIVITY_ID(+) AND enq.flat_id = flt.flat_id(+) and enq.ATTENDED_BY_MKEY = em.USER_ID(+) and and cef_mkey=2590 order by enq.followup_sr_no desc 
+0

Начните форматировать его правильно, возможно, вы увидите ошибку, затем –

+0

@a_horse_with_no_name: обязательно сэр, какие советы по форматированию запроса? в частности: 'SQL' и' Oracle' запросы – BNN

ответ

1

У вас есть две AND на последней строке: and and cef_mkey=2590. Удалите его, это недействительный синтаксис.

select enq.followup_sr_no ColFolSrno,case when enq.followup_sr_no=(select max(followup_sr_no) from xxcus.XXACL_PN_ENQUIRY_FOLLOWUP where cef_mkey=enq.cef_mkey) and enq.activity_id not in (80,40) then 'Edit' else 'View' end ColViewEdit, 
ENQ.FOLLOWUP_TYPE_ID ColFolTypeId,FOL.FOLLOW_TYPE ColFolType,ENQ.PRIORITY_ID ColPrioId,PRI.PRIORITY ColPriority, 
to_char(ENQ.FOLLOWUP_DATE,'dd/MM/yyyy') ColFolUpDt,ENQ.ACTIVITY_ID ColActId,ACT.ACTIVITY ColActivity,ENQ.REMARKS ColComments, 
'Flat-' || (select FP.FLAT_NO FROM xxcus.xxacl_pn_ratecard rc, xxcus.xxacl_pn_flatproj_v fp where RC.FLAT_ID=FP.FLAT_ID and RC.CEF_MKEY=enq.CEF_MKEY and RC.FOLLOWUP_SR_NO=enq.FOLLOWUP_SR_NO) ColPrint, 
to_char(ENQ.NEXT_FOLLOW_UP_DATE,'dd/MM/yyyy') ColNxtFolUpDt,ENQ.NEXT_ACTIVITY_ID ColNxtActId,NACT.ACTIVITY ColNxtActivity, (select RC.FLAT_ID FROM xxcus.xxacl_pn_ratecard rc where RC.CEF_MKEY=enq.CEF_MKEY and RC.FOLLOWUP_SR_NO=enq.FOLLOWUP_SR_NO)FLAT_ID , 
enq.mkey mkey , enq.ATTENDED_BY_MKEY AttendedByMkey , em.user_id User_Id , em.login_name EnqueryBy 
from XXACL_PN_EMPLOYEE_ALL_V em, xxcus.XXACL_PN_ENQUIRY_FOLLOWUP enq, xxcus.XXACL_PN_FOLLOWUP_TYPE_V fol,xxcus.XXACL_PN_PRIORITY_V pri,xxcus.XXACL_PN_ACTIVITY_V act,xxcus.XXACL_PN_ACTIVITY_V nact, xxcus.xxacl_pn_flatproj_v flt 
where ENQ.FOLLOWUP_TYPE_ID = FOL.FOLLOW_TYPE_ID(+) and ENQ.PRIORITY_ID = PRI.PRIORITY_ID(+) and ENQ.ACTIVITY_ID = ACT.ACTIVITY_ID(+) and ENQ.NEXT_ACTIVITY_ID = NACT.ACTIVITY_ID(+) AND enq.flat_id = flt.flat_id(+) and enq.ATTENDED_BY_MKEY = em.USER_ID(+) and cef_mkey=2590 order by enq.followup_sr_no desc 
+0

у меня не было, зачем добавлять или удалять эти вещи ??. Что, если я хочу, чтобы оба? – BNN

+0

я удалил этот конец, все еще получая эту ошибку – BNN

+0

спасибо, что сработало для меня .. – BNN

0

В последней строке запроса у вас есть

where ENQ.FOLLOWUP_TYPE_ID = FOL.FOLLOW_TYPE_ID(+) and ENQ.PRIORITY_ID = PRI.PRIORITY_ID(+) and ENQ.ACTIVITY_ID = ACT.ACTIVITY_ID(+) and ENQ.NEXT_ACTIVITY_ID = NACT.ACTIVITY_ID(+) AND enq.flat_id = flt.flat_id(+) and enq.ATTENDED_BY_MKEY = em.USER_ID(+) and and cef_mkey=2590 order by enq.followup_sr_no desc 

Обратите внимание, у вас есть и оператор дважды подряд.

where ENQ.FOLLOWUP_TYPE_ID = FOL.FOLLOW_TYPE_ID(+) and ENQ.PRIORITY_ID = PRI.PRIORITY_ID(+) and ENQ.ACTIVITY_ID = ACT.ACTIVITY_ID(+) and ENQ.NEXT_ACTIVITY_ID = NACT.ACTIVITY_ID(+) AND enq.flat_id = flt.flat_id(+) and enq.ATTENDED_BY_MKEY = em.USER_ID(+) and cef_mkey=2590 order by enq.followup_sr_no desc 

Это то, что должна быть.

Кроме того, если вы использовали ANSI-92 вместо синтаксиса ANSI-89 (JOINs вместо всех таблиц в инструкции FROM), вы, вероятно, не получите эту ошибку, потому что в условии WHERE должно быть только одно условие.

Смежные вопросы