为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
**sql1:**SELECT PERSON.BUDGET_DEPT,
NVL((SELECT SD.COA_COMPANY
FROM T_SYS_DEPT SD
WHERE SD.ID = TO_CHAR(PERSON.BUDGET_DEPT)),
TO_CHAR(PERSON.BUDGET_DEPT)) AA
FROM T_BMS_BILL_MAIN MAIN, T_BMS_BILL_PERSON PERSON
WHERE MAIN.ID = 'BBM202308171946536E6AB3D894884C06B0AE1C5B4B4972E4'
AND PERSON.MAIN_ID = MAIN.ID
AND (INSTR('@(SDT202304111030202DD103A289B44B2A81FD8185CC9FD866)',
'@(' || NVL((SELECT SD.COA_COMPANY
FROM T_SYS_DEPT SD
WHERE SD.ID = TO_CHAR(PERSON.BUDGET_DEPT)),
TO_CHAR(PERSON.BUDGET_DEPT)) || ')') <= 0)
AND (PERSON.ORIGINAL_CURRENCY_SUM) != 0; -- 此sql执行结果正确!
此sql的执行计划:
sql2: SELECT PERSON.BUDGET_DEPT
FROM T_BMS_BILL_MAIN MAIN, T_BMS_BILL_PERSON PERSON
WHERE MAIN.ID = 'BBM202308171946536E6AB3D894884C06B0AE1C5B4B4972E4'
AND PERSON.MAIN_ID = MAIN.ID
AND (INSTR('@(SDT202304111030202DD103A289B44B2A81FD8185CC9FD866)',
'@(' || NVL((SELECT SD.COA_COMPANY
FROM T_SYS_DEPT SD
WHERE SD.ID = TO_CHAR(PERSON.BUDGET_DEPT)),
TO_CHAR(PERSON.BUDGET_DEPT)) || ')') <= 0)
AND (PERSON.ORIGINAL_CURRENCY_SUM) != 0; -- 此SQL执行结果不正确!
此sql的执行计划:
备注:两个sql在oracle中执行结果一致,均完全正确!
初略的看了一下,两条语句的条件并不一样,由于不清楚定义不好深入判断,如果还有问题,需要提供表定和demo数据信息。
你两条语句不一样吧?