String 在字符串中包含参数

String 在字符串中包含参数,string,postgresql,parameters,dynamic-sql,postgresql-9.5,String,Postgresql,Parameters,Dynamic Sql,Postgresql 9.5,尝试在以下字符串中包含参数时出现问题: 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 FR

尝试在以下字符串中包含参数时出现问题:

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';  

如何解决此问题?

我已解决此问题。默认情况下,它将参数读取为“”,而该参数在字符串中不存在,因此错误如下->(=''或a=b)

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

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

我解决了这个问题。默认情况下,它将参数读取为“”,而该参数在字符串中不存在,因此错误如下->(=''或a=b)

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

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

我猜你的背教是不平衡的,我的原因甚至不是第22行。第`(` `| acc|u category `´´´´´´´´´´´或p1.partner|acccegory=acc|u category)`行之前的所有内容都正常工作什么是
acc|u category
放在单引号中?这是
WHERE
子句中唯一一个这样处理的术语。我想做一些类似于“从配置文件p1中选择p1.name,其中a=b和($1=''和a=c)”的事情,基本上读取$1,后面跟着“=”符号,就会出现错误。我猜你的撇号是不平衡的,原因甚至不是第22行。行之前的所有内容(“| | acc|u category | |”=“p1.partner|acccegory=acc|u category)`工作正常什么是
acc|u category
放在单引号中?这是
WHERE
子句中唯一这样处理的术语。我想做类似于“从配置文件p1中选择p1.name,其中a=b和($1=''和a=c)'基本上读取$1后跟'='符号会显示错误