GBase 8s
适配迁移
问答

SQL语句适配问题

发表于2024-03-12 09:03:54122次浏览9个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:

【操作系统】:

【CPU】:

【问题描述】*:SELECT
NVL(t2.deptName,#{deptName}) as deptName,NVL(t2.YEAR,t1.YEAR) as year,NVL(t2.month,t1.month) as month,
NVL(t2.dataType,#{dataType}) as dataType,NVL(t2.status,'-1') as status,'2' as type
FROM (
SELECT sda.DICT_VALUE as YEAR,sda1.DICT_VALUE as month FROM SYS_DICT_DATA sda
LEFT JOIN SYS_DICT_DATA sda1 ON 1=1 AND sda1.DICT_TYPE = 'submitted_month' AND sda1.DICT_VALUE = #{month}
WHERE sda.DICT_TYPE = 'submitted_year' AND sda.DICT_VALUE = #{year}
)t1 LEFT JOIN (
SELECT
sd.DEPT_NAME as deptName,ars.YEAR,ars.month,ars.data_type as dataType,ars.STATUS as status,'2' as type
FROM SYS_DEPT sd
LEFT JOIN AK_REGION_SUMMARY ars ON ars.DEPT_ID = sd.DEPT_ID AND ars.DEL_FLAG = '0'
WHERE ars.DEPT_ID = #{deptId}  AND ars.data_type = #{dataType} AND ars.YEAR = #{year} AND ars.MONTH = #{month}
)t2 ON t1.YEAR = t2.YEAR AND t1.MONTH = t2.month
WHERE (t2.status NOT IN ('1','2','3','4') OR t2.status IS NULL )

 

目前发现问题出在 第二、三行的参数那块NVL(t2.deptName,#{deptName}) as deptName,NVL(t2.dataType,#{dataType}) as dataTyp,但是不知道在南大数据库怎么适配修改,跪求大佬。

评论

登录后才可以发表评论
用户头像
远方发表于 2年前
经过测试发现是NVL函数不支持变量的方式,吧#换成$试一试,NVL(t2.deptName,${deptName}) as deptName,NVL(t2.dataType,${dataType}) as dataTyp
GBase用户15406发表于 2年前
@远方:按照上述修改后还是执行不通过
GBase用户15406发表于 2年前
@远方:按照上述修改,还是执行不通过
GBase用户15406发表于 2年前
@远方:貌似不行
用户头像
远方发表于 2年前
@GBase用户15406:${deptName}为字符串的话需要加上单引号,'${deptName}'
用户头像
liaosnet发表于 2年前
NVL(expr1, expr2)函数的第二个参数是表达式,不允许绑定变量。
可使用NVL2函数(NVL2(expr, result1, result2) )代替,NVL2(t2.dataType,t2.dataType,#{deptName})
或者DECODE、CASE等写法。
最佳回答
崔哥发表于 6个月前
黄河九天上,人鬼瞰重关。长风怒卷高浪,飞洒日光寒。峻似吕梁千仞,壮似钱塘八月,直下洗尘寰。万象入横溃,依旧一峰闲。仰危巢,双鹄过,杳难攀。人间此险何用,万古袐神奸。不用燃犀下照,未必佽飞强射,有力障狂澜。唤取骑鲸客,挝鼓过银山。
用户头像
GBase用户28017发表于 5个月前
解决了?
GBase用户51890发表于 2个月前
不清楚啊。