SQL数据集
你可以利用自定义的SQL定义一个数据集,例如:
select * from EMPLOYEE
实现动态SQL
数据库数据集的SQL也支持动态参数设置,例如:
select * from EMPLOYEE where DEPT_ID=${$dept_id}
其中${}是BaskServer的表达式的定义方法
$dept_id表示使用报表中名称为dept_id的参数。
在SQL数据集中只是使用参数,但是参数的定义需要到使用这个数据集的文件对象上定义,不同的文件有不同的定义方式,具体的参数定义可以参考:
利用表达式我们可以实现更为丰富的SQL语句编写。
范例1
${
if (isEmpty($dept_id)) {
return "select * from EMPLOYEE"
} else {
return "select * from EMPLOYEE where DEPT_ID = ${$dept_id}"
}
}
范例2
${
var sql = "select * from EMPLOYEE where 1=1"
if (isNotEmpty($dept_id)) {
sql = sql + "and DEPT_ID = ${$dept_id}"
}
if (isNotEmpty($employee_id)) {
sql = sql + "and EMPLOYEE_ID = ${$employee_id}"
}
if (isNotEmpty($sex)) {
sql = sql + "and SEX = ${$sex}"
}
return sql;
}
又因为BaskServer中表达式可对一个普通值进行判断,值为null或为false皆返回false,否则返回true(类似Javascript语法),所以上面的SQL又可简写成下面的样子:
${
var sql = "select * from EMPLOYEE where 1=1"
if ($dept_id) {
sql = sql + "and DEPT_ID = ${$dept_id}"
}
if ($employee_id) {
sql = sql + "and EMPLOYEE_ID = ${$employee_id}"
}
if ($sex) {
sql = sql + "and SEX = ${$sex}"
}
return sql;
}
上面的sql变量的拼装时没有使用sql+="..."方式,原因是BaskServer中表达式语法不支持这种赋值写法,所以使用的是sql=sql+....。