在地理服务器中处理 IS NULL SQL 参数
Posted
技术标签:
【中文标题】在地理服务器中处理 IS NULL SQL 参数【英文标题】:Handling IS NULL SQL parameters in geoserver 【发布时间】:2022-01-24 05:37:51 【问题描述】:我正在使用查询和应用样式从 geoserver 上的 postgres 数据库创建一个 SQL 层。
我想根据传入的参数创建两个层,目前我通过创建两个单独的 SQL 层来处理这个问题。
第一层:
SELECT
activity_group_id, activity_name, application_status_code,
village_code, geom
FROM
dbt.dbt_point_primary
WHERE
village_code = '%vinCode%'
AND attributes = '%attribute%'
AND application_status_code = %statusCode%
第二层:
SELECT
activity_group_id, activity_name, application_status_code,
village_code, geom
FROM
dbt.dbt_point_primary
WHERE
village_code = '%vinCode%'
AND attributes = '%attribute%'
AND application_status_code = %statusCode%
AND activity_group_id = %activity_group_id%
通过 getMap 函数访问该层时,我正在传递 viewParams
&viewparams=vinCode:546748;statusCode:1;attribute:Farmer
和
&viewparams=vinCode:546748;statusCode:1;activity_group_id:19;attribute:Farmer
我在这里担心的是,我可以通过在 SQL 层中使用 ISNULL
函数将其处理为仅 1 个 SQL 层,而不是为同一预期层创建 2 个单独的层。
谁有资源可以分享?
【问题讨论】:
IS NULL
会出现在您的查询中吗?您可以在创建视图时使用任何有效的 Postgresql/Postgis SQL 的任何方式
【参考方案1】:
您可以检查您的参数是否为空,如果不使用它来过滤查询
...
AND (%activity_group_id% IS NULL OR activity_group_id = %activity_group_id%)
【讨论】:
【参考方案2】:正如@JGH 所建议的,这是在地理服务器上处理 sql 查询的方式。 SQL 层
SELECT
activity_group_id, activity_name, application_status_code,
village_code, geom
FROM
dbt.dbt_point_primary
WHERE
village_code = '%vinCode%'
AND attributes = '%attribute%'
AND application_status_code = %statusCode%
AND (%activity_group_id% IS NULL OR activity_group_id = %activity_group_id%)
允许 viewparams 中的空值将正则表达式更改为 ^(?:[\w\d\s]+$)
将视图参数传递为
获取所有 activity_group_id &viewparams=vinCode:546748;statusCode:1;activity_group_id:**NULL**;attribute:Farmer
获取 activity_group_id 的特定层 &viewparams=vinCode:546748;statusCode:1;activity_group_id:**value**;attribute:Farmer
【讨论】:
以上是关于在地理服务器中处理 IS NULL SQL 参数的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException: connection holder is null 问题处理
SQL Server-聚焦LEFT JOIN...IS NULL AND NOT EXISTS性能分析(十七)
在 ASP.Net 中使用 SQL Server 2012 地理数据类型 - DataReader.GetFieldType(x) 返回 null