当我使用如下语句的时候没有任何问题,可以查询出2条数据
SELECT
dd_isShare,
'aaa' ledger_id,
'FK01' coa_type_code
from v_cem_voucher_detail
where md_id = 'BI2017120700072938'
and (instr('@(N)', '@(' || dd_isShare || ')') > 0 AND
instr('@(SY2017090700059015)', '@(' || dd_invoiceType || ')') = 0)
但是当我使用如下语句:
SELECT
--dd_isShare,
'aaa' ledger_id,
'FK01' coa_type_code
from v_cem_voucher_detail
where md_id = 'BI2017120700072938'
and (instr('@(N)', '@(' || dd_isShare || ')') > 0 AND
instr('@(SY2017090700059015)', '@(' || dd_invoiceType || ')') = 0)
把dd_isShare和dd_invoiceType中2个字段在select注释掉,就查询不到任何数据,v_cem_voucher_detail 是一个视图,而且该情况在生产上出现,测试服务器上没有问题,个人觉得很奇怪,已经排除是语句或者视图的问题,剩下的不知道还有什么情况?
其中dd_isShare 是一个子查询的转换(decode((select count(1) from t_aaa_es es where d.no = es.connno and d.mainid = es.mainid and d.corpid = d.corpid),0,'N','Y')) dd_isShare,
求解答
我也没遇到过,可以尝试参考一下以下:
原因:
1. 判断生产数据是否存在?
2. 改成多行注释/* comment */试试;
3. 去掉这两个注释掉的字段,再查看试试;
排查一下
where条件中的字段必须在select中,否则where不生效
不要使用注释在试一下
测试环境可以,生产不可以,明显是环境问题啊。把这个sql语句拆分,一个条件一个条件的增加的查询。很容易定位啊。
赞同一楼。。。。。。。。。。。。。。。。
判断生产数据是否存在?