问题描述
错误:
ERROR: operator does not exist: record = character varying
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Position: 228
查询:
select ar.adm_rule_id
from adm_promo.adm_rule ar,adm_promo.adm_non_comp_rule ac,adm_promo.adm_rule_hier_level ah
where ar.rule_type =?
and ar.sales_org_id=?
and (ac.promo_market_id,ah.level_id) in (?)
and ar.adm_rule_id=ac.adm_rule_id
and ar.adm_rule_id=ah.adm_rule_id
and ar.delete_f='N'
and (ar.eff_end_date>=(?) and ar.eff_start_date<=(?))
and ar.dist_channel=?
但是当我在Postgresql中尝试时,我得到的是与实际输入相同的查询的结果 输入查询:
select ar.adm_rule_id
from adm_promo.adm_rule ar,adm_promo.adm_rule_hier_level ah
where ar.rule_type =1
and ar.sales_org_id=1
and (ac.promo_market_id,ah.level_id) in ((9,63))
and ar.adm_rule_id=ac.adm_rule_id
and ar.adm_rule_id=ah.adm_rule_id
and ar.delete_f='N'
and (ar.eff_end_date>=('2020-09-29')
and ar.eff_start_date<=('2020-10-17'))
and ar.dist_channel=1
我找不到确切的问题,团队请帮助我解决此问题。
解决方法
我怀疑这有问题:
(ac.promo_market_id,ah.level_id) in (?)
根据错误提示尝试将其更改为:
(ac.promo_market_id,ah.level_id) in (?::record)
从它说“位置228”这一事实来判断,然后滚动到查询的那个字符,就可以使您接近:
(ac.promo_market_id,ah.level_id) in ((9,63))
但是您的查询模板具有此
(ac.promo_market_id,ah.level_id) in (?)
很可能是您在此处提供了错误的数据。数据库驱动程序不太可能支持参数化的值列表(以匹配“ IN”子句)。您可能最终会得到一些带引号的文本,而Postgres将其视为“字符变化”,这当然是不匹配的。