报错数据库版本如下:
报错sql语句如下:
select count(1) from ( select aaa.*
from ( SELECT
supplySignOne.supplSign AS supplySign,
supplySignOne.supply_sign AS remarks,
dc.supplier_jc as "supplierJcs"
FROM drug_stock a
INNER JOIN drug_info b
ON a.info_id = b.id
AND ( b.org_id = a.org_id
OR b.org_id = (SELECT parent_id FROM sys_company WHERE org_code = a.org_id))
LEFT JOIN drug_supplier_cata dc
ON a.supplier_id = dc.id
LEFT JOIN ( SELECT zz.drug_info,
zz.pack_size,
SUM(zz.supply_sign) as supply_sign,
LISTAGG(
CASE
WHEN zz.pack_size = '1'
THEN '小包装'
ELSE '大包装'
END ||
CASE
WHEN zz.supply_sign = '1'
THEN '停止供应'
ELSE '正常'
END, ';' ) AS supplSign
FROM drug_price zz
WHERE (zz.org_id = 'H13018100523'
OR zz.org_id = (SELECT parent_id
FROM sys_company
WHERE org_code = 'H13018100523'))
GROUP BY zz.drug_info,
zz.pack_size ) supplySignOne
ON supplySignOne.drug_info = a.info_id
AND supplySignOne.pack_size = a.pack_size
LEFT JOIN ( SELECT xx.drug_info,
SUM(xx.supply_sign) as supply_sign,
LISTAGG(
CASE
WHEN xx.pack_size = '1'
THEN '小包装'
ELSE '大包装'
END ||
CASE
WHEN xx.supply_sign = '1'
THEN '停止供应'
ELSE '正常'
END, ';' ) AS supplSign
FROM drug_price xx
WHERE (xx.org_id = 'H13018100523'
OR xx.org_id = (SELECT parent_id
FROM sys_company
WHERE org_code = 'H13018100523'))
GROUP BY xx.drug_info ) supplySignTwo
ON supplySignTwo.drug_info = a.info_id
LEFT JOIN his_vs_medical hvm
ON a.price_id = hvm.price_id
WHERE a.del_flag = '0'
AND b.del_flag = '0'
AND a.inventory_is_show = '0'
AND (a.org_id = 'H13018100523'
OR a.org_id IN (SELECT org_code
FROM sys_company
WHERE parent_id = 'H13018100523'))
AND a.quantity != 0
AND a.is_supply != 1 ) aaa
) tmp_count
经分析测试,去掉最外层的select count(1) 后,内层语句可以执行成功,或将内层left join的supplySignTwo部分去掉,sql带上 count(1) 也能执行成功。将sql有关的表ddl导出在本地测试库验证,可以复现问题。
使用新版本数据库验证,上述sql可以执行成功不会报错,对比了两个版本的dm.ini文件中不同的参数,经验证与参数值差异无关,应当是版本问题,升级至新版本即可解决。
本地测试使用的新版本为–03134284404-20251210-306367-20164 Pack16(8.1.4.116 pack16)
文章
阅读量
获赞
