T2.3: Uses SQL in Applications

Knowledge Review - InterSystems IRIS SQL Specialist

1. Define conexiones de InterSystems IRIS (JDBC, ODBC, xDBC)

Puntos Clave

  • JDBC: Driver Java puro nivel 4 conforme a estándares para aplicaciones Java
  • ODBC: Interfaz de nivel de llamada lenguaje C soportando plataformas Windows y UNIX
  • xDBC: Término colectivo para JDBC, ODBC, y otras interfaces de conectividad de base de datos
  • Formato URL de conexión: jdbc:IRIS://host:port/namespace para conexiones JDBC
  • DSN (Data Source Name): Configuración de conexión lógica para acceso ODBC

Notas Detalladas

Resumen

InterSystems IRIS proporciona múltiples opciones de conectividad de base de datos para soportar diversos entornos de aplicación y lenguajes de programación.

JDBC (Java Database Connectivity)

Implementado como driver Java puro nivel 4 conforme a estándares.

Características:

  • Alto rendimiento
  • Soporte nativo Unicode
  • Thread-safety

Formato URL de conexión: `jdbc:IRIS://host:port/namespace`

Carga de driver:

  • Clase DriverManager
  • Clase IRISDataSource
  • Compatible con cualquier herramienta, aplicación, o entorno de desarrollo soportando JDBC

ODBC (Open Database Connectivity)

Proporciona una interfaz de nivel de llamada lenguaje C que es conforme a ODBC 3.5.

Características de driver:

  • Driver nativo (no construido sobre interfaz propietaria)
  • Rendimiento y portabilidad óptimos

Soporte de plataforma:

  • Windows: Usa gestor de driver de Microsoft
  • UNIX: Usa gestores de driver iODBC o unixODBC

Configuración de conexión:

  • Típicamente configurado a través de Data Source Names (DSNs)
  • DSNs almacenan: ubicación de driver, dirección de servidor, puerto, namespace, credenciales de login opcionales

Características Comunes

Ambos drivers JDBC y ODBC ofrecen:

  • Alto rendimiento
  • Soporte nativo Unicode
  • Thread-safety
  • Adecuado para entornos de producción empresarial

xDBC

El término xDBC se refiere colectivamente a estas interfaces de conectividad de base de datos, proporcionando opciones flexibles para que aplicaciones accedan datos de InterSystems IRIS relacionalmente.

2. Comprende pasos prepare y execute para dynamic SQL

Puntos Clave

  • Clase %SQL.Statement: Clase primaria para ejecutar sentencias dynamic SQL
  • Método %Prepare(): Valida SQL, crea consulta en caché, genera metadatos
  • Método %Execute(): Ejecuta sentencia preparada con parámetros de entrada opcionales
  • Consultas en caché: Sentencias preparadas almacenadas para reutilización a través de múltiples ejecuciones
  • Parámetros de entrada: Usar placeholders ? o variables host :varname para valores

Notas Detalladas

Resumen

Dynamic SQL en InterSystems IRIS usa la clase %SQL.Statement para ejecutar sentencias SQL definidas en runtime a través de un flujo de trabajo de dos pasos prepare-and-execute.

Método %Prepare()

Toma una sentencia SQL como cadena o array subscripted y realiza:

  • Valida la sintaxis
  • Verifica que las tablas referenciadas existen
  • Crea una consulta en caché para optimización de rendimiento
  • Genera metadatos sobre la sentencia

Valor de retorno:

  • Valor %Status donde éxito es igual a 1
  • Fallo retorna un error codificado comenzando con 0

Comportamiento de caché de consulta:

  • Busca automáticamente en caché sentencias preparadas idénticas
  • Si se encuentra, no se crea nueva consulta en caché
  • Importante: Nunca colocar sentencias prepare dentro de loops

Método %Execute()

Ejecuta la sentencia preparada y retorna un objeto %SQL.StatementResult.

Propiedades de resultado:

  • %SQLCODE
  • %Message
  • %ROWCOUNT
  • %ROWID

Para consultas SELECT:

  • Genera un conjunto de resultados
  • Recorrer usando %Next(), %Display(), o %GetRow()

Parámetros de Entrada

Dos métodos para especificar parámetros de entrada:

  • Placeholders ?: Valores pasados como argumentos a %Execute() en orden secuencial
  • Variables host: Prefijadas con : para referenciar variables ObjectScript

Beneficio: La misma consulta puede ejecutarse múltiples veces con diferentes valores de parámetro sin re-preparar

Métodos Alternativos

  • %ExecDirect(): Combina prepare y execute en una sola llamada de método
  • $SYSTEM.SQL.Prepare() / $SYSTEM.SQL.Execute(): Alternativas procedimentales sin instanciación de objeto

3. Previene inyección SQL a través de uso de parámetros

Puntos Clave

  • Nunca concatenar entrada de usuario: Evitar construir SQL con concatenación de cadenas
  • Usar parámetros de entrada ?: Enfoque de placeholder para valores literales en consultas
  • Variables host con :name: Referenciar variables ObjectScript de forma segura
  • Manejo automático de tipo: Los parámetros se escapan y tipean apropiadamente
  • Nota de mejor práctica: Siempre validar variables de entrada antes de ejecución SQL

Notas Detalladas

Resumen

La inyección SQL es una vulnerabilidad de seguridad crítica que ocurre cuando entrada de usuario no confiable se concatena directamente en sentencias SQL, permitiendo a atacantes manipular lógica de consulta o acceder datos no autorizados.

Método de Prevención

InterSystems IRIS previene inyección SQL a través de consultas parametrizadas usando el patrón prepare-and-execute de %SQL.Statement.

Principio clave: Nunca concatenar valores suministrados por usuario directamente en cadenas SQL

Placeholders de Parámetro ?

  • La sentencia SQL contiene placeholders como "WHERE Age > ? AND Name = ?"
  • Los valores reales se pasan como argumentos a %Execute() en orden secuencial
  • El motor de base de datos maneja automáticamente:
  • Escapado apropiado
  • Conversión de tipo
  • Sustitución de valor
  • La entrada de usuario se trata estrictamente como datos, nunca como código ejecutable

Variables Host

  • Prefijadas con : para referenciar variables ObjectScript
  • Sustituidas cuando la sentencia se ejecuta
  • Nota: Las variables deben declararse PUBLIC en métodos ProcedureBlock

Verificación de Parámetro

  • %GetImplementationDetails(): Lista todos los parámetros de entrada en una consulta preparada para verificación

Limitaciones de Parámetro

  • Deben tomar valores literales o expresiones que resuelvan a literales
  • No pueden usarse para nombres de columna o alias
  • Límites máximos: 255 para parámetros explícitos, 380 con arrays de longitud variable

Mejor Práctica

Siempre confirmar que las variables de entrada contengan valores apropiados antes de insertarlas en código SQL, incluso al usar consultas parametrizadas.

4. Usa control de transacción explícito (START TRANSACTION, COMMIT, ROLLBACK)

Puntos Clave

  • START TRANSACTION: Inicia transacción explícita, incrementa $TLEVEL a 1
  • COMMIT: Confirma todo el trabajo, libera bloqueos, reinicia $TLEVEL a 0
  • ROLLBACK: Deshace trabajo no confirmado, libera bloqueos, restaura estado de base de datos
  • %COMMITMODE: Controla comportamiento de transacción automática (EXPLICIT, IMPLICIT, NONE)
  • Aislamiento de transacción: Niveles READ COMMITTED, READ UNCOMMITTED, READ VERIFIED

Notas Detalladas

Resumen

InterSystems IRIS proporciona control de transacción explícito a través de comandos SQL que gestionan consistencia e integridad de datos a través de múltiples operaciones de base de datos.

START TRANSACTION

  • Inicia inmediatamente una transacción
  • Incrementa contador de nivel de transacción $TLEVEL de 0 a 1
  • Debe concluirse con COMMIT o ROLLBACK independientemente de configuración de modo de commit actual

COMMIT

  • Completa la transacción haciendo todos los cambios permanentes
  • Libera todos los bloqueos establecidos durante la transacción
  • Reinicia $TLEVEL a 0
  • Importante: El trabajo confirmado no puede ser revertido
  • Soporta palabra clave WORK opcional para compatibilidad SQL-92

ROLLBACK

  • Deshace todo el trabajo no confirmado realizado durante la transacción
  • Libera bloqueos
  • Decrementa $TLEVEL
  • Restaura base de datos a estado antes de que la transacción comenzara
  • Soporta palabra clave WORK opcional para compatibilidad SQL-92

Parámetro %COMMITMODE

Controla comportamiento de transacción automática:

  • IMPLICIT (predeterminado): Auto-confirma cada operación
  • EXPLICIT: Requiere confirmaciones manuales
  • NONE: Sin procesamiento de transacción automática

ISOLATION LEVEL

Determina si las consultas pueden ver cambios no confirmados de transacciones concurrentes:

  • READ COMMITTED: Las consultas solo ven datos confirmados
  • READ UNCOMMITTED: Permite leer cambios no confirmados para rendimiento máximo
  • READ VERIFIED: Re-verifica condiciones para manejar actualizaciones concurrentes

Transacciones Anidadas

  • InterSystems SQL no soporta transacciones anidadas
  • Emitir START TRANSACTION cuando una transacción ya está en progreso no tiene efecto y no retorna error
  • Sentencias SAVEPOINT: Establecen puntos nombrados dentro de transacciones para rollback parcial

Estado de Transacción

  • Variable de sistema $TLEVEL: Verifica nivel de transacción actual
  • Sentencia %INTRANSACTION: Verifica estado de transacción

Compatibilidad ObjectScript

  • Los comandos TSTART/TCOMMIT/TROLLBACK son completamente compatibles con comandos de transacción SQL
  • Excepción: TSTART soporta transacciones anidadas mientras que START TRANSACTION no

Resumen de Preparación para el Examen

Conceptos Críticos a Dominar:

  1. Tipos de Conexión: Comprender diferencias entre JDBC (Java, URL de conexión) y ODBC (lenguaje C, basado en DSN)
  2. Flujo de Trabajo Dynamic SQL: Dominar el patrón prepare-execute con %SQL.Statement
  3. Prevención de Inyección SQL: Siempre usar consultas parametrizadas, nunca concatenar entrada de usuario
  4. Control de Transacción: Saber cuándo usar START TRANSACTION, COMMIT, y ROLLBACK
  5. Parámetros de Entrada: Comprender tanto placeholders ? como variables host :varname

Escenarios Comunes de Examen:

  • Identificar formato correcto de URL de conexión JDBC para un servidor/namespace dado
  • Determinar cuándo usar %Prepare() vs %ExecDirect()
  • Reconocer código SQL vulnerable que concatena entrada de usuario
  • Seleccionar %COMMITMODE apropiado para requisitos de transacción
  • Elegir ISOLATION LEVEL correcto para necesidades de consistencia de datos

Recomendaciones de Práctica Práctica:

  • Escribir código de conexión Java y ODBC a InterSystems IRIS
  • Practicar dynamic SQL con %SQL.Statement, %Prepare(), y %Execute()
  • Probar consultas parametrizadas con múltiples parámetros de entrada
  • Implementar transacciones con START TRANSACTION, COMMIT, ROLLBACK
  • Experimentar con diferentes niveles de aislamiento y observar comportamiento
  • Comparar modos de commit IMPLICIT, EXPLICIT, y NONE

Report an Issue