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+....。

results matching ""

    No results matching ""