1. Usa SelectMode apropiadamente (Logical, Display, ODBC)
Puntos Clave
- SelectMode: Especifica cómo se visualizan y ingresan datos - tres modos disponibles: Logical (0), ODBC (1), Display (2)
- Modo Logical: Datos mostrados en formato de almacenamiento interno ($HOROLOG para fechas, formato codificado para %List)
- Modo ODBC: Datos formateados como YYYY-MM-DD hh:mm:ss.fff para compatibilidad con clientes ODBC/JDBC
- Modo Display: Datos formateados según configuraciones de locale (MM/DD/YYYY hh:mm:ss para locale Americano)
- Predeterminado es modo Logical; afecta tanto salida de consulta como formato de entrada de predicado
Notas Detalladas
Resumen
InterSystems SQL usa la opción SelectMode para controlar cómo se muestran los valores de datos en resultados de consulta y cómo deberían formatearse los valores de entrada en predicados.
- Modos disponibles: Logical (0), ODBC (1), Display (2)
- Almacenamiento interno: Los datos siempre se almacenan internamente en modo Logical
Métodos de Transformación
SelectMode aplica transformaciones usando métodos definidos en clases de tipo de dato:
- LogicalToDisplay()
- LogicalToOdbc()
- DisplayToLogical()
- OdbcToLogical()
Tipos de Dato Afectados
SelectMode afecta principalmente:
- Tipos de dato Date, Time, y Timestamp
- Datos codificados %List
Formatos de Visualización Específicos de Modo
Modo Logical:
- Fechas: Formato $HOROLOG (días enteros desde 31 de diciembre de 1840, coma, segundos desde medianoche)
- Datos %List: Sentencias $LISTBUILD como $lb("White","Green")
Modo ODBC:
- Fechas y horas: Estandarizadas como YYYY-MM-DD hh:mm:ss.fff
- Diseñado para compatibilidad de herramienta externa
Modo Display:
- Fechas: Formatos específicos de locale definidos en %SYS.NLS.Format o parámetro FORMAT del tipo de dato
Implicaciones de Entrada y Salida
SelectMode afecta tanto formato de salida como requisitos de entrada para predicados de cláusula WHERE.
Ejemplo de desajuste: Si DOB se almacena en formato $HOROLOG y cláusula WHERE especifica WHERE DOB > 2000-01-01 (formato ODBC):
- SelectMode=ODBC: Retorna resultados pretendidos
- SelectMode=Display: Genera SQLCODE -146 (incapaz de convertir entrada de fecha)
- SelectMode=Logical: Intenta analizar fecha ODBC como formato Logical, retornando cero filas
Procesamiento Interno
- SelectMode se aplica a expresiones completas, no campos individuales
- Funciones y concatenaciones realizadas sobre representaciones Logical antes de formato SelectMode
- Las sentencias SQL se ejecutan internamente en modo Logical independientemente de SelectMode
- Cláusulas ORDER BY, funciones, y métodos SQLPROC todos operan sobre valores Logical
Configuración de SelectMode en Dynamic SQL
Con %SQL.Statement, SelectMode se establece vía propiedad %SelectMode:
- Ejemplo: `##class(%SQL.Statement).%New(2,"Sample")` establece modo Display con esquema Sample
Referencias de Documentación
2. Usa sintaxis de flecha para joining implícito (->)
Puntos Clave
- Sintaxis de flecha (->): Operador específico de InterSystems para LEFT OUTER JOIN implícito sin sintaxis JOIN explícita
- Funciona con propiedades reference (relaciones de clave foránea) y propiedades relationship de tablas padre
- Referencia de propiedad: EmployeeTable->CompanyID->CompanyName recorre tablas relacionadas sin problemas
- Referencia de tabla hija: OrdersTable->LineItems->Amount recupera datos de tabla hija con múltiples filas de resultado
- Requiere privilegios SELECT sobre campo ID y columna referenciada en tabla relacionada
Notas Detalladas
Resumen
InterSystems SQL proporciona el operador de sintaxis de flecha (->) como abreviatura poderosa para acceder valores de tablas relacionadas sin escribir sentencias JOIN explícitas complejas.
- Tipo de operación: Realiza una operación LEFT OUTER JOIN
- Casos de uso: Propiedades reference (columna contiene ID de tabla referenciada) o propiedades relationship de tablas padre
- Limitaciones: No puede usarse en cláusulas ON o con todos los tipos de clave foránea
Uso Básico
El operador de flecha permite navegación intuitiva a través de relaciones de tabla similar a notación punto de objeto.
Comparación de ejemplo:
- JOIN explícito: `SELECT Sample.Employee.Name, Sample.Company.Name FROM Sample.Employee LEFT OUTER JOIN Sample.Company ON Sample.Employee.Company = Sample.Company.ID`
- Sintaxis de flecha: `SELECT Name, Company->Name FROM Sample.Employee`
Colocación Válida
El operador de flecha puede usarse en cualquier lugar donde una expresión de columna sea válida:
- Listas SELECT
- Cláusulas WHERE
- Cláusulas GROUP BY
- Cláusulas ORDER BY
Sintaxis de Flecha Compuesta
Soportada para recorrer múltiples relaciones:
- Ejemplo: `Film->Category->CategoryName` accede tres tablas relacionadas en secuencia
Referencias de Tabla Hija
Al referenciar tablas hijas:
- La sintaxis de flecha produce múltiples filas en el conjunto de resultados para cada fila padre
- Ejemplo: `SELECT LineItems->amount FROM Orders` es equivalente a `SELECT L.amount FROM Orders O LEFT JOIN LineItems L ON O.id=L.custorder`
Requisitos de Privilegio
La sintaxis de flecha requiere privilegios SELECT apropiados sobre todos los datos referenciados.
Con privilegios a nivel de columna:
- Necesita privilegio SELECT sobre tanto el campo ID de la tabla referenciada como la columna referenciada
- Ejemplo: `Company->Name` requiere privilegios sobre Company.ID y Company.Name
Compatibilidad
- Puede combinarse con sintaxis JOIN explícita en la misma consulta
- Funciona con tablas sharded
Referencias de Documentación
Resumen de Preparación para el Examen
Conceptos Críticos a Dominar:
- Tres Opciones SelectMode: Saber cuándo usar modos Logical (0), ODBC (1), o Display (2)
- Impacto de Tipo de Dato SelectMode: Comprender cómo fechas/horas y datos %List se muestran diferentemente en cada modo
- Entrada/Salida SelectMode: Reconocer que SelectMode afecta tanto formato de salida de consulta como requisitos de entrada de cláusula WHERE
- Fundamentos de Sintaxis de Flecha: Dominar el operador -> para operaciones LEFT OUTER JOIN implícitas
- Sintaxis de Flecha Compuesta: Comprender encadenamiento de múltiples flechas para recorrido multi-tabla
- Privilegios de Sintaxis de Flecha: Saber que se requieren privilegios SELECT sobre tanto ID como columnas referenciadas
Escenarios Comunes de Examen:
- Elegir SelectMode apropiado para aplicaciones cliente ODBC/JDBC vs. consultas internas
- Solucionar errores de comparación de fecha causados por desajustes SelectMode
- Simplificar consultas JOIN complejas usando sintaxis de flecha
- Usar sintaxis de flecha en cláusulas WHERE, GROUP BY, y ORDER BY
- Comprender requisitos de privilegio para consultas con sintaxis de flecha
- Reconocer cuándo la sintaxis de flecha no puede usarse (cláusulas ON, ciertos tipos de clave foránea)
Recomendaciones de Práctica Práctica:
- Ejecutar la misma consulta con diferentes configuraciones SelectMode y comparar resultados
- Practicar conversión de consultas LEFT OUTER JOIN explícitas a sintaxis de flecha
- Probar sintaxis de flecha compuesta con relaciones de tabla multi-nivel
- Verificar requisitos de privilegio de sintaxis de flecha con %CHECKPRIV
- Usar sintaxis de flecha con tablas hijas para comprender multiplicación de conjunto de resultados
- Combinar sintaxis de flecha con JOINs explícitos en consultas complejas