es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Manejo de parámetros SQL IS NULL en Geoserver

Estoy creando una capa SQL a partir de una base de datos de postgres en geoserver utilizando una consulta y aplicando estilo a la misma.

Quiero crear dos capas basadas en el parámetro pasado a ellas, actualmente estoy manejando esto creando dos capas SQL separadas.

Primera capa:

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%

Segunda capa:

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%

Al acceder a esta capa a través de la función getMap, estoy pasando los viewParams:

&viewparams=vinCode:546748;statusCode:1;attribute:Farmer

y

&viewparams=vinCode:546748;statusCode:1;activity_group_id:19;attribute:Farmer

Mi preocupación aquí es que en lugar de crear 2 capas separadas para la misma capa esperada, ¿puedo manejar esto en solo 1 capa SQL utilizando la función ISNULL en la capa SQL?

¿Alguien tiene alguna fuente para compartir?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puede manejar esto utilizando la función ISNULL en la capa SQL. En lugar de crear dos capas SQL separadas, puede modificar la consulta de la capa SQL existente utilizando la siguiente consulta:

    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% OR %activity_group_id% IS NULL)
    

    En la consulta anterior, ISNULL se reemplaza con OR %activity_group_id% IS NULL para manejar el caso en el que activity_group_id no se pasa como un viewParam. En este caso, devolverá todos los activity_group_id.

    Esta consulta modificada manejará ambos casos y le dará los resultados deseados.

    En cuanto a la fuente, puede consultar la documentación oficial de GeoServer y los recursos disponibles en línea para la creación de capas SQL y la optimización de consultas.

Comments are closed.