La sentencia SQL que define el origen de una capa de consulta es estática. No obstante, hay casos en los que partes de las sentencias SQL no se conocen de antemano. Por ejemplo, al visualizar datos agregados de las precipitaciones, puede que no sepa si el lector de mapas desea agregar los valores de las estaciones pluviométricas por día, semana o mes. Los parámetros de las capas de consultas hacen que los componentes de la sentencia SQL sean dinámicos. Puede imaginarse un parámetro de consulta como una variable de sentencia SQL para la que se define el valor al ejecutar la consulta. Estos son los dos tipos de parámetros de consulta:
- Los parámetros de rango conectan valores numéricos o temporales dinámicamente a los controles deslizantes de rango y tiempo. Por ejemplo, considere una consulta SQL que incluya un parámetro de rango WHERE ::r:myRangeVar1. La consulta SQL que se envía a la base de datos es WHERE aField = value o WHERE aField => value1 AND aField <= value2, dependiendo de si el control deslizante de rango ha transferido uno o dos valores.
- Los parámetros discretos actualizan una consulta con valores literales cuando se ejecuta la consulta. Por ejemplo, considere una consulta SQL que defina una capa de consulta e incluya dos parámetros discretos WHERE city_population > ::population AND state_name = ::name. Cuando se especifican valores del tipo 10000 y California para cada parámetro, respectivamente, la consulta SQL que se envía a la base de datos es WHERE city_population > 10000 AND state_name = 'California'.
Nota:
Una capa de consulta se define mediante una consulta SQL que se especifica al crear una capa de consulta. Puede crear una capa de consulta usando la herramienta de geoprocesamiento Crear capa de consulta, pero no puede definir parámetros usando esta herramienta. Para usar parámetros en la consulta SQL, modifique la capa de consulta en el cuadro de diálogo Editar consulta.
Si necesita una capa de consulta que le permita buscar valores agregados por fecha, hora o rangos numéricos, utilice la herramienta de geoprocesamiento Crear capa de consulta de agregación para generar la capa de consulta con la agregación dinámica habilitada y definir parámetros de consulta para mostrar los resultados.
Parámetros de rango
Los parámetros de rango funcionan con valores numéricos (enteros o dobles) o de fecha-hora para mostrar los datos dinámicamente en los controles deslizantes de rango o tiempo. Se declaran sin una referencia a un campo o una expresión, y no se usan operadores lógicos en la consulta SQL. En lugar de eso, el campo o la expresión se define como una propiedad del parámetro. Los parámetros de rango usan como prefijo la palabra clave ::r:. Puede usar parámetros de rango cuando la cláusula WHERE de la consulta SQL dependa de campos que no formen parte de la lista SELECT.
Un ejemplo es: WHERE ::r:MyRangeParameter
Cuando declare un parámetro de rango, debe especificar un campo o una expresión, el tipo de datos y, opcionalmente, los valores predeterminados y el alias que se deben usar en los controles deslizantes. Haga clic en Valor predeterminado para introducir los valores predeterminados mínimo y máximo. Cuando esta casilla esté activada, debe introducir al menos un valor para validar la expresión. Los valores predeterminados pueden ser literales (un número o una fecha) o una expresión que devuelve un valor del tipo de datos especificado.
En los siguientes pasos se explica cómo definir un parámetro de rango en una tabla llamada Earthquakes para mostrar los terremotos ocurridos durante los últimos siete días como un periodo de tiempo predeterminado y, opcionalmente, utilizar el control deslizante de tiempo para cambiar este periodo:
- En la pestaña Mapa del grupo Capa, abra el menú Agregar datos y haga clic en Capa de consulta.
- En el menú Conexión, elija una conexión de base de datos o cree una conexión mediante Nueva conexión a geodatabase .
- En el campo Nombre, escriba Earthquakes.
- En el cuadro Consulta, escriba select * from EARTHQUAKES where ::r:EQDateRange.
- Pase el cursor por encima del parámetro ::r:EQDateRange del código y haga clic en Editar consulta para editar las propiedades.
- Introduzca las siguientes propiedades del parámetro:
- En Campo o Expresión, introduzca el nombre de un campo de fecha y hora.
- En Tipo de datos, elija Fecha.
- Active la opción Valor predeterminado.
- Introduzca expresiones de valor predeterminado, de acuerdo con la base de datos subyacente.
En la tabla siguiente se muestran algunos ejemplos de bases de datos. Consulte Configuraciones de base de datos y cliente para capas de consulta para obtener una lista completa de bases de datos que se pueden configurar para usar capas de consulta.
Base de datos Desde valor Hasta valor Microsoft SQL Server
dateadd(dd, -7, cast(getdate() as date)) cast(getdate() as date) Oracle
trunc(CURRENT_DATE) - INTERVAL '7' DAY trunc(CURRENT_DATE) PostgreSQL
CURRENT_DATE - INTERVAL '7 days' CURRENT_DATE - Haga clic en Hecho.
- Haga clic en Validar para asegurarse de que la consulta SQL y las definiciones de rangos sean válidas.
- Haga clic en Siguiente.
- Especifique los Campos de identificador único, el Tipo de geometría y la Referencia espacial y haga clic en Finalizar.
Ahora puede utilizar el control deslizante de tiempo para navegar a cualquier período de tiempo y ver los terremotos que han ocurrido. Puede hacer clic en el botón Deshabilitar tiempo para ver los terremotos ocurridos dentro de rango de tiempo predeterminado establecido que, en este ejemplo, corresponde a los últimos siete días.
Precaución:
Puede declarar más de un parámetro de rango en una capa de consulta, pero solo uno de esos parámetros de rango puede hacer referencia a valores de fecha-hora.
Propiedades avanzadas para parámetros de rango
Si falla la validación de la consulta, puede ser necesario especificar algunas propiedades avanzadas para los parámetros de rango. Expanda la sección Opciones avanzadas de las propiedades del parámetro para especificar el nombre de la tabla a la que pertenece el campo. Esto ayuda a recuperar los valores mínimo y máximo directamente de la tabla. Esto mejora la eficiencia, especialmente si el parámetro se encuentra dentro de una consulta anidada. Además, bajo el encabezado Opciones avanzadas, si no se han proporcionado valores predeterminados, debe especificar la expresión que se debe usar cuando falta el valor para el parámetro. Elija 1=1 (el ajuste predeterminado), que resolverá el parámetro a 'TRUE' en la expresión, o 1=0, que resolverá el parámetro a 'FALSE'.
Parámetros discretos
Los parámetros discretos funcionan con valores numéricos (enteros o dobles), de fecha o de cadena de caracteres y usan como prefijo la palabra clave ::. Se combinan con un campo o una expresión utilizando operadores SQL. Puede actualizar el valor del campo para filtrar los datos que se dibujan en el mapa.
Cuando se declara un parámetro discreto, debe especificar un tipo de dato y valores predeterminados. Para suministrar una lista de opciones en la capa en el tiempo de ejecución, use el operador SQL IN y active Permitir varios valores. Opcionalmente, especifique el alias que se debe usar en lugar del nombre del parámetro. A continuación, se muestran algunos ejemplos:
- WHERE aFieldName = ::var1
- WHERE AdminField IN ::AdminAgency
Parámetros discretos predefinidos
Además de declarar sus propios parámetros discretos, existen dos parámetros discretos predefinidos que puede utilizar en sus consultas. El parámetro view_extent especifica un filtro espacial para su consulta y puede mejorar considerablemente el rendimiento cuando trabaja con datasets muy grandes. El parámetro view_scale le permite acceder a la escala de mapa actual en la consulta. Estas variables solo se consideran en el contexto de un mapa 2D. Se ignorarán en una escena 3D.
view_extent
Cuando se visualiza una capa en un mapa, la consulta que se envía a la base de datos tiene un filtro espacial incorporado al final de la consulta SQL. Con esto es suficiente, pero puede que quiera limitar la agregación a solamente las entidades visibles en la extensión actual. En estos casos, puede agregar el parámetro view_extent a la consulta para limitarla espacialmente a la extensión actual.
Puede agregar ::view_extent en cualquier parte de su consulta, tantas veces como sea necesario. A diferencia de los parámetros discretos personalizados, no hay propiedades que definir y el valor predeterminado del parámetro es NULO.
La consulta SQL que se envía a la base de datos sustituye ::view_extent por un polígono en formato de texto conocido (WKT) en la misma referencia espacial que la capa. Utilice una función específica de base de datos y un Id. de referencia espacial (SRID) para crear una geometría a partir del polígono de extensión WKT. En los siguientes ejemplos se muestra esto para tipos de base de datos de SQL Server y PostgreSQL:
- En SQL Server: WHERE shape.STWithin(geometry::STGeomFromText(::view_extent, 4326)) = 1
- En PostgreSQL: WHERE ST_Within(shape, ST_GeomFromText(::view_extent, 4326))
view_scale
Utilice el parámetro predefinido view_scale cuando desee variar la cláusula WHERE o los campos seleccionados según la escala de mapa actual. El valor predeterminado de cero se aprueba cuando utiliza este parámetro. No hay ninguna otra propiedad que definir. Puede especificar este parámetro tantas veces como sea necesario en su consulta SQL. En los siguientes ejemplos se utiliza el parámetro view_scale en los tipos de base de datos de SQL Server y PostgreSQL:
- En SQL Server: WHERE IIF(::view_scale > 100000, <do this>, <do that>)
- En PostgreSQL: WHERE (CASE WHEN ::view_scale >= 100000 THEN <do this> WHEN ::view_scale >= 50000 AND ::view_scale < 100000 THEN <do that> ELSE <do the other thing> END)
Agregar parámetros a una capa de consulta
Para agregar un parámetro a la consulta, siga estos pasos:
- Haga clic con el botón derecho en la capa en el panel Contenido y haga clic en Propiedades .
- En la pestaña Fuente, en la fila Consulta de la tabla, haga clic en Editar consulta .
La consulta se expresa en el cuadro de texto Consulta.
Sugerencia:
Para que el texto de la consulta sea más fácil de leer, puede ampliarlo pulsando la tecla Ctrl mientras gira la rueda del ratón hacia delante.
- Posicione el puntero en el código y escriba ::r:<name> para introducir un parámetro de rango o ::<name> para introducir un parámetro discreto.
Los parámetros aparecen en la consulta SQL en negrita e incluyen un botón Editar junto a ellos.
- Haga clic en el botón Editar para acceder a las propiedades del parámetro.
- Defina las propiedades del parámetro y haga clic en Listo.
Debe definir un Valor predeterminado y un Tipo de datos. Otras propiedades son opcionales.
- En el cuadro de diálogo Editar consulta, haga clic en Validar para asegurarse de que no hay errores.
- Siga definiendo las propiedades espaciales de la capa y haga clic en Finalizar cuando haya terminado.