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。
好的,谢谢,目前哪个版本是相对比较稳定的呀?建议升级到哪个版本呢
最新版本。
好的,谢谢了