Tabla de consulta de base de datos

La tabla de consulta de base de datos es una tabla con nombre asignado que contiene una consulta específica de base de datos en lugar de una referencia a una tabla de base de datos o vista de base de datos existente. La consulta se escribe en la sintaxis SQL de la base de datos y se debe usar cuando una consulta no puede especificarse como consulta MISQL (por ejemplo, debe usar subconsultas, combinaciones externas, etc.) o cuando pueda tener un mejor rendimiento que una tabla de vista con nombre asignado. Cuando utilice una tabla de consulta de base de datos considere lo siguiente:

  • Si se actualiza la estructura o las vistas de las tablas a las cuales se hace referencia en la consulta, configure el atributo volátil como true. Esto afecta el rendimiento dado que los metadatos de la tabla se crean para cada solicitud.

  • Una tabla con nombre asignado basada en una solicitud de base de datos no admitirá las operaciones de insertar, actualizar o eliminar.
  • Entre las bases de datos admitidas se incluye Oracle, SQL Server y PostGIS.
  • Si una consulta devuelve una geometría, entonces la columna de geometrías se debe definir en el elemento DBDataSourceMetadata.
  • Si una consulta devuelve una clave principal, entonces se debe definir en el elemento KeyAttributes.

La tabla de consulta de base de datos es similar a una tabla de vistas. Sin embargo, existen condiciones para preferir una o la otra. Consulte Tabla de vista para obtener más detalles. Las siguientes tablas muestran las principales diferencias entre las dos:

Tabla 1. Comparación de una Tabla de consulta de base de datos con una Tabla de vista
Tabla de Vista Tabla de consulta de base de datos

Usa consultas MISQL

Usa consultas específicas de la base de datos, lo que es análogo a una vista creada en la base de datos.
La consulta de combinación admite tablas con nombre asignado de diferentes fuentes de datos La consulta de combinación debe hacer referencia a tablas y vistas dentro de la misma base de datos
Delega los operadores dependiendo del proveedor de datos Delega solamente operadores de Comparación de atributos y EnvelopeIntersects
No admite consultas SQL anidadas Admite consultas SQL anidadas y específicas de la base de datos

Reglas de delegación

Los operadores de Comparación de atributos y EnvelopesIntersect Operator se delegarán a la base de datos.

Ejemplo

Este es un ejemplo de una tabla de consulta de base de datos.

<?xml version="1.0" encoding="UTF-8"?>
<NamedDataSourceDefinition xmlns="http://www.mapinfo.com/mxp" xmlns:gml="http://www.opengis.net/gml" version="MXP_NamedResource_1_5">
   <ConnectionSet>
      <NamedConnectionRef resourceID="/oracle_db_connection">
         <ConnectionName>connection1</ConnectionName>
      </NamedConnectionRef>
   </ConnectionSet>
   <DataSourceDefinitionSet>
      <DBDataSourceDefinition id="id1" readOnly="false" volatile="false">
         <DataSourceName>WORLD</DataSourceName>
         <ConnectionMember>
            <ConnectionName>connection1</ConnectionName>
         </ConnectionMember>
         <DBQuery>
            <Query>Select MI_Prinx, GEOM, Country, Capital from World where Country in('Canada','India')</Query>
         </DBQuery>
         <DBDataSourceMetadata>
            <FeatureGeometryAttribute srsName="epsg:4326">GEOM</FeatureGeometryAttribute>
            <KeyAttributes>
               <AttributeName>MI_Prinx</AttributeName>      
            </KeyAttributes>
         </DBDataSourceMetadata>
      </DBDataSourceDefinition>
   </DataSourceDefinitionSet>
   <DataSourceRef ref="id1" />
</NamedDataSourceDefinition>