DataEase数据集的自定义sql中,定义了一个动态变量,传值内容为多选框的值时就会报错,请问要如何解决?

DataEase版本是v2.10,数据集的自定义sql中,定义了一个动态变量,当传值内容为单选框的值是不会报错,传值内容为多选框的值时就会报错,请问要如何解决?

使用的是oracle数据库,sql对应的是oracle中的语法

SQL 数据集带参数传递,根据过滤组件的不同,SQL 语法用法上有差异。

情况一:过滤组件为单选时,要用 = :

SELECT ORDER_ID, ORDER_DATE, PROJ_ID, ORDER_EMP FROM ORDERS WHERE ORDER_EMP = '${USER_NAME}'

情况二:过滤组件为多选时,要用 IN (用 IN 可单选也可多选,但相反地用 = 只能单选),注意变量外需要用括号包起来:

SELECT ORDER_ID, ORDER_DATE, PROJ_ID, ORDER_EMP FROM ORDERS WHERE ORDER_EMP IN (${USER_NAME})  

情况三:有多个过滤组件时,要用括号将它们组合在一起,否则图表无法更新:

SELECT ORDER_ID, ORDER_DATE, PROJ_ID, ORDER_EMP FROM ORDERS WHERE (ORDER_EMP IN ${USER_NAME} AND PROJ_ID IN ${USER_PROJ_ID})

情况四:结合两个时间过滤组件进行日期范围(时间字段需为 13 位时间戳)传参,使用 BETWEEN 或者用 <、 > :

SELECT * FROM SALES WHERE 记录时间 BETWEEN '${BEGINTIME}' AND '${ENDTIME}';

SELECT * FROM SALES WHERE 记录时间 > '${BEGINTIME}' AND 记录时间 < '${ENDTIME}'

感谢大佬,目前是情况二,数据库是oracle,sql那边也是用的IN (${USER_NAME})这种写法,但是为啥过滤组件为多选时候就会有报错(报错ORA-00907)?不知道如何解决?求帮忙

这个你升级一下版本,或者不要用in。

好的,谢谢,目前哪个版本是相对比较稳定的呀?建议升级到哪个版本呢

最新版本。

好的,谢谢了