2016-02-29 129 views
1

我有一個問題,當我嘗試包括下面的字符串中的參數中的參數:包括字符串

sel:='SELECT partner_code,acc_date,journal_no,term_code,due_date, 
     currency,curr_rate,amount,acc_amount,aging_months,acc_outstanding,category, 
     doc_outstanding,partner_name,sales_person,ref_no1,ref_no2,description 
    FROM 
    (SELECT 
     j1.partner_code,j1.acc_date,j1.journal_no,j1.term_code,COALESCE(j1.due_date,j1.acc_date) as due_date, 
     j1.ref_no1,(case when c1.opt_master_acc=TRUE then j1.ref_no2 else '''' END) as ref_no2,j1.description, 
     j1.currency,j1.curr_rate,j1.amount,j1.acc_amount,c1.category, 
     p1.name as partner_name, 
     (SELECT (SELECT (SELECT (DATE_PART(''year'', ''' || aging_date::date ||'''::date)- DATE_PART(''year'',(CASE WHEN ' || use_duedate || '=true THEN COALESCE(j1.due_date,j1.acc_date) ELSE j1.acc_date END)::date))* 12) + (SELECT (DATE_PART(''month'', ''' || aging_date::date || '''::date)- DATE_PART(''month'',(CASE WHEN ' || use_duedate || '=true THEN COALESCE(j1.due_date,j1.acc_date) ELSE j1.acc_date END)::date))))) as aging_months, 
     (c1.opt_partner_drcr*(j1.acc_amount-j1.match_acc_amount))::decimal(19,4) AS acc_outstanding, 
     a1.sales_rep as sales_person,p1.area, 
     ((CASE WHEN j1.curr_rate>0 THEN ROUND(c1.opt_partner_drcr*((acc_amount-match_acc_amount))/j1.curr_rate,2) ELSE 0 END)::decimal(19,4)) as doc_outstanding 
     FROM acc_journal j1 
     INNER JOIN acc_journal_cfg c1 ON j1.book_type=c1.book_type and j1.doc_type=c1.doc_type 
     INNER JOIN PARTNER p1 ON j1.partner_code=p1.partner_code 
     LEFT OUTER JOIN partner_acc a1 ON p1.partner_id=a1.partner_id 
     WHERE j1.book_type=''' || tran_code || ''' and j1.acc_amount <>0 AND 
     j1.doc_type<>''ORM'' AND 
     (' || acc_category || '=' || ' '''' OR p1.partner_acccategory=acc_category) 
     AND (j1.acc_date>=acc_start_date) 
     AND (j1.acc_date<=' || aging_date::date || ') 
     AND (j1.acc_amount<>j1.match_acc_amount) 
     AND j1.rec_state>=0) AS SQL1'; 

基本錯誤是在該行:

ERROR: syntax error at or near "=" 
LINE 22:   (= '' OR p1.partner_acccategory=acc_category) 
       ^

我如何解決這個問題?

+0

我的猜測是你的apostophes是不平衡的,而且原因我也不是線22 –

+0

一切前行'(「|| acc_category ||‘=’||」‘’ ''或p1.partner_acccategory = acc_category)'正常工作 –

+0

什麼是'acc_category'放入單引號?這是你的'WHERE'子句中唯一被這樣處理的術語。 –

回答

0

我解決了這個問題。它默認讀取的參數是'',它不在字符串內部,因此錯誤是這樣的 - >(=''OR a = b)

我找到的解決方案是包含CASE WHEN和當值爲''時,添加更多的單引號使它成爲''''。代碼如下:

first string part || (CASE WHEN acc_category='' THEN '''''' ELSE acc_category END)::varchar || last string part 
相關問題