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)
                  ^ 

我该如何解决?

4

1 回答 1

0

我解决了这个问题。它默认将参数读取为 '' 这在字符串中没有任何内容,因此错误是这样的 -> (='' OR a=b)

我找到的解决方案是包含一个 CASE WHEN 并添加更多单引号以使其值为 '''。代码如下:

first string part || (CASE WHEN acc_category='' THEN '''''' ELSE acc_category END)::varchar || last string part
于 2016-02-29T08:25:29.087 回答