2014-09-04 2 views
0

Я написал запрос в PostgreSQL, который отлично работает, но не работает при выполнении в Oracle SQL. Я измучен, пытаясь понять проблему. Пожалуйста, помогите мне исправить это.oci_execute(): ORA-00907: отсутствует правая скобка

SELECT tb1.executive_code,tb1.month,tb1.year,tb1.count_req_no, 
    t1.count_enquiry_closed,tb1.sum_exp_amt,tb1.sum_trr_exp_tenure, 
    tb1.sum_exp_tenure,t1.avg_total_case_tat,tb1.count_finance_amt, 
    tb1.count_mls,t1.count_rejection_negative,t1.count_dedupe_date, 
    t1.count_rejection_pre,t1.count_fi_feedback_date, 
    t1.count_rejection_fi,t1.count_ready_date 
FROM (
    SELECT dealing_executive_code AS executive_code, 
    date_part('month',tb.req_date) AS month, 
    date_part('year',tb.req_date) AS year, 
    count(tb.req_no) AS count_req_no, 
    dealing_executive_code,sum(tb.exp_amt) AS sum_exp_amt, 
    sum(tb.tent_net_irr_cost_all_payout*tb.exp_amt*tb.tenure) AS sum_trr_exp_tenure, 
    sum(tb.exp_amt*tb.tenure) AS sum_exp_tenure, 
    count(case when insurance_finance_amt !='0' then '1' end) AS count_finance_amt, 
    count(case when mls_finance_amount !='0' then '1' end) AS count_mls 
    FROM tb_requisition_report AS tb 
    GROUP BY date_part('month',tb.req_date),date_part('year',tb.req_date), 
    tb.dealing_executive_code 
) AS tb1 
LEFT JOIN (
    SELECT date_part('month',enq_date) AS d1, 
    date_part('year',enq_date) AS d2, 
    count(case when enquiry_status='CLOSED' then '1' end)AS count_enquiry_closed, 
    dealing_executive_code,avg(total_case_tat) AS avg_total_case_tat, 
    count(case when lost_rejection_stage='NEGATIVE DEDUPE STAGE' then '1' end) AS count_rejection_negative, 
    count(case when dedupe_date IS NOT NULL then '1' end) AS count_dedupe_date, 
    count(case when lost_rejection_stage='PRE SANCTION DOCUMENT PENDIN' then '1' end) AS count_rejection_pre, 
    count(case when fi_feedback_date IS NOT NULL then '1' end) AS count_fi_feedback_date, 
    count(case when lost_rejection_stage='FI NEGATIVE CLEARANCE STAGE' then '1' end) AS count_rejection_fi, 
    count(case when fi_ready_date IS NOT NULL then '1' end) AS count_ready_date 
    FROM tb_lead_tracker 
    GROUP BY date_part('month',enq_date),date_part('year',enq_date), 
    dealing_executive_code 
) AS t1 
ON t1.dealing_executive_code=tb1.dealing_executive_code 
AND t1.d1=tb1.month AND t1.d2=tb1.year 
+0

У меня были исправленные проблемы, такие как date_part, которые были заменены выпиской, но все еще не могут определить, что является проблемой – Praneeth

+0

все еще много проблем с синтаксисом - синтаксис eft join неправильный, вам не нужно «как», чтобы дать псевдоним таблице , Начните с запуска отдельного запроса, и вы поймете это. – Sathya

+1

Покажите нам свою попытку преобразования запроса в Oracle - оставив все вызовы 'date_part', когда в Oracle нет функции' date_part' (если вы не создали один) не помогает нам многое выяснить, какие синтаксические ошибки вы знаете и какие из них вам неизвестны. Если вы запустите запрос в SQL * Plus, это даст вам строку и столбец ошибки (не знаю, использует ли какая-либо инфраструктура, которую вы используете). –

ответ

1

Вы не можете использовать AS для псевдонима таблицы в Oracle, только для псевдонимов столбцов. Так, например, это:

FROM tb_requisition_report AS tb 

... должно быть:

FROM tb_requisition_report tb 

и то же самое для других встроенных представлений. В настоящий момент анализатор AS воспринимается парсером как нечто, что недолго, где оно есть, и оно возвращается к ORA-00907, как это часто бывает - обычно это не означает, что на самом деле есть несбалансированная скобка , только это не было найдено там, где это ожидалось, что часто связано с другой синтаксической ошибкой. Парсер не может интерпретировать то, что вы намеревались сделать, не всегда может быть более конкретным о том, что не так, особенно когда задействованы другие ключевые слова.

Сатья уже упоминал, что в комментарии, а также datepart не является встроенной функцией Oracle, так что, вероятно, не решит все ваши проблемы.