1. Define e implementa procedimientos almacenados
Puntos Clave
- Procedimiento Almacenado: Rutina llamable almacenada en la base de datos, invocada dentro del contexto SQL vía CALL o ODBC/JDBC
- Tres Tipos: Procedimientos de consulta (retornan conjuntos de resultados), procedimientos de método (modific an datos), procedimientos de función (retornan valores únicos)
- Métodos de Implementación: Comando DDL CREATE PROCEDURE o método de clase con palabra clave SqlProc
- Convención de Nomenclatura: Proyectado como NombreEsquema_NombreProcedimiento (ej., MyApp.Person_FindTotal)
- Palabra Clave SqlProc: Marca métodos de clase como procedimientos almacenados llamables por SQL
Notas Detalladas
Resumen
Los procedimientos almacenados de InterSystems IRIS proporcionan rutinas llamables que integran SQL con el poder completo de la programación orientada a objetos.
- Implementación: Los procedimientos almacenados se implementan como métodos de clase (a diferencia de bases de datos relacionales tradicionales)
- Argumentos: Aceptan argumentos de entrada, entrada-salida, y salida
- Invocación: Pueden invocarse usando la sentencia CALL o a través de conexiones JDBC/ODBC
Tipos de Procedimientos Almacenados
InterSystems IRIS soporta tres tipos de procedimientos almacenados:
- Procedimientos almacenados de consulta: Retornan conjuntos de resultados usando definición Query con palabra clave SqlProc y tipo %SQLQuery
- Ideal para operaciones de recuperación de datos definidas con SQL embebido
- Generan automáticamente métodos Execute(), Fetch(), FetchRows(), GetInfo(), y Close()
- Procedimientos almacenados de método: Definidos como ClassMethods con la palabra clave SqlProc
- Perfectos para operaciones que modifican datos de base de datos o realizan cálculos
- Usa objeto %sqlcontext para pasar contexto de procedimiento (SQLCODE, ROWCOUNT, mensajes de error)
- Procedimientos almacenados de función: Retornan valores únicos
- Pueden usarse dentro de consultas SQL como funciones incorporadas
Métodos de Implementación
- CREATE PROCEDURE DDL: Genera procedimiento almacenado siempre proyectado como rutina llamable
- Definiciones basadas en clase: Proporcionan más flexibilidad e integración con características de objeto
- Palabra clave SqlName: Permite personalización del nombre SQL
Nomenclatura y Límites
- Convención de nomenclatura: Proyectado como NombreEsquema_NombreProcedimiento (ej., MyApp.Person_FindTotal)
- Límite máximo: 2000 métodos definidos por usuario por clase
Beneficios
- Encapsulación de lógica de negocio compleja
- Promoción de reutilización de código
- Integración empresarial a través de conectividad ODBC y JDBC
Referencias de Documentación
2. Define e implementa triggers
Puntos Clave
- Definición de Trigger: Código ejecutado automáticamente en respuesta a eventos INSERT, UPDATE, o DELETE
- Tipos de Evento: Evento único (una operación) o múltiple evento (INSERT/UPDATE, UPDATE/DELETE, INSERT/UPDATE/DELETE)
- Opciones de Tiempo: BEFORE (predeterminado) o AFTER de que ocurra el evento, controlado por palabra clave Time
- Granularidad de Ejecución: Una vez por fila (predeterminado), row/object, o una vez por sentencia (palabra clave Foreach)
- Métodos de Implementación: DDL CREATE TRIGGER o definición Trigger en clase persistente con palabra clave Event
Notas Detalladas
Resumen
Los triggers de InterSystems IRIS proporcionan automatización dirigida por eventos para operaciones de base de datos, ejecutando código en respuesta a eventos de modificación de datos.
- Métodos de definición: Comando SQL CREATE TRIGGER o definición Trigger dentro de clase persistente
- Privilegios requeridos: Privilegios administrativos %CREATE_TRIGGER y %DROP_TRIGGER
- Límite máximo: 200 triggers definidos por usuario por clase
Características de Triggers
Los triggers se caracterizan por:
- Palabra clave Event (requerida): Especifica qué operaciones disparan el trigger (INSERT, UPDATE, DELETE, o combinaciones)
- Palabra clave Time (opcional): Controla cuándo el trigger ejecuta relativo al evento (BEFORE o AFTER; predeterminado BEFORE)
- Palabra clave Order: Gestiona secuencia de ejecución para múltiples triggers (valores Order menores disparan primero)
- Palabra clave Foreach: Proporciona granularidad de ejecución:
- row (predeterminado): Dispara una vez por fila afectada
- row/object: Dispara tanto para acceso SQL como de objeto
- statement: Dispara una vez por sentencia SQL independientemente de filas afectadas
Comportamiento de Trigger AFTER
- Condición de ejecución: Ejecuta solo cuando SQLCODE es igual a 0 (éxito) o 100 (no se encontró fila)
- No ejecutado: Cuando SQLCODE es negativo (fallos)
Recursión de Trigger
El comportamiento de recursión depende del tipo de trigger:
- Triggers row y row/object: Pueden recurrir; el programador debe manejar para evitar errores FRAMESTACK
- Triggers AFTER statement: Protegidos de recursión por el sistema
- Triggers BEFORE statement: No protegidos; requieren gestión del programador
Correspondencia de Trigger y Callback
Los triggers corresponden a métodos callback:
- BEFORE/AFTER INSERT: Mapean a %OnBeforeSave()/%OnAfterSave()
- BEFORE/AFTER UPDATE: Mapean a los mismos callbacks de save
- BEFORE/AFTER DELETE: Mapean a %OnDelete()/%OnAfterDelete()
- Diferencia de tiempo: Los callbacks ejecutan antes de bloqueos de objeto; los triggers ejecutan después de validación de campos
Referencias de Documentación
3. Comprende opciones de lenguaje para lógica de negocio (SQL, ObjectScript, Python)
Puntos Clave
- ObjectScript: Lenguaje nativo para triggers y procedimientos almacenados, usa sintaxis {fieldname} y variables especiales
- Python: Soportado para triggers con palabra clave Language = python, usa objeto trigger con atributos y método getfield()
- SQL: Puede usarse dentro de CREATE TRIGGER para código de trigger (convertido a ObjectScript internamente)
- Embedded SQL: Soportado dentro de procedimientos almacenados y triggers de ObjectScript usando sintaxis &sql()
- Selección de Lenguaje: Basada en experiencia del desarrollador, requisitos de integración, y estándares organizacionales
Notas Detalladas
Resumen
InterSystems IRIS proporciona opciones de lenguaje flexibles para implementar lógica de negocio, soportando ObjectScript, Python, y SQL.
- Propósito: Acomodar diversos conjuntos de habilidades de desarrollador y escenarios de integración
- Acceso a datos: Los tres lenguajes pueden acceder a los mismos datos y objetos subyacentes
ObjectScript para Triggers
ObjectScript es el lenguaje nativo proporcionando integración completa del sistema y rendimiento óptimo.
Sintaxis de acceso a campos:
- {fieldname}: Valores actuales
- {fieldname*N}: Nuevos valores en UPDATE/DELETE
- {fieldname*O}: Valores antiguos en INSERT/UPDATE
- {fieldname*C}: Detectar cambios
Variables del sistema:
- %ok: Bandera de éxito
- %msg: Mensaje de error
- %oper: Tipo de operación
Invocación de método:
- Usar sintaxis `##class(classname).Methodname()`
- No puede usar sintaxis de método de instancia (`..Methodname()`) ya que no hay objeto abierto
- Todas las variables de trigger son públicas (no con alcance a un procedimiento) excepto variables del sistema
Python para Triggers
El soporte de Python habilita implementación de trigger usando sintaxis Python familiar.
- Requisito: Palabra clave `Language = python` en definición de trigger
- Limitación: Solo soporta granularidad `Foreach = row/object`
Atributos de objeto trigger:
- trigger.type: row/object o row
- trigger.operation: BEFORE, UPDATE, DELETE
- trigger.time: before o after
- trigger.ok: Corresponde a %ok de ObjectScript
- trigger.msg: Corresponde a %msg de ObjectScript
Acceso a campos:
- `trigger.getfield(fieldName)`: Recupera valores de campo
- Parámetro booleano opcional: new=1 (predeterminado) o old=0
- Detección de cambios: Comparar `trigger.getfield(fieldname,0)` y `trigger.getfield(fieldname,1)` (no hay equivalente directo a {fieldname*C})
SQL en Triggers
- CREATE TRIGGER: SQL puede usarse para código de acción de trigger
- Conversión: InterSystems IRIS convierte SQL a ObjectScript en definición de clase generada
- Embedded SQL: Usar sintaxis &sql() en ObjectScript para capacidades de consulta
- Variables host: Acceder con prefijos de dos puntos (:variable)
Directrices de Selección de Lenguaje
- ObjectScript: Especialistas de IRIS, integración profunda del sistema
- Python: Científicos de datos, pipelines de aprendizaje automático
- SQL: Administradores de base de datos, operaciones de datos sencillas
Referencias de Documentación
Resumen de Preparación para el Examen
Conceptos Críticos a Dominar:
- Tipos de Procedimientos Almacenados: Comprender diferencias entre procedimientos almacenados de consulta, método y función
- Tipos de Evento de Trigger: Conocer triggers de evento único vs. múltiple evento y tiempo BEFORE vs. AFTER
- Granularidad Foreach: Distinguir entre ejecución de trigger a nivel row, row/object, y statement
- Sintaxis de Lenguaje: Dominar sintaxis {fieldname} de ObjectScript y método trigger.getfield() de Python
- Palabra Clave SqlProc: Recordar marcar métodos de clase con SqlProc para exponer como procedimientos almacenados
Escenarios Comunes del Examen:
- Crear un procedimiento almacenado que retorne un conjunto de resultados usando Query con palabra clave SqlProc
- Implementar un trigger BEFORE INSERT para validar o modificar datos antes del almacenamiento
- Elegir entre ObjectScript y Python para implementación de trigger basado en requisitos
- Usar embedded SQL dentro de un procedimiento almacenado para consultar o modificar datos
- Comprender cuándo los triggers AFTER ejecutan (SQLCODE=0 o 100, no valores negativos)
Recomendaciones de Práctica Práctica:
- Crear procedimientos almacenados de consulta, método y función en Management Portal
- Definir triggers usando enfoques tanto CREATE TRIGGER como basados en clase
- Implementar triggers en ObjectScript y Python para comparar sintaxis
- Probar orden de ejecución de trigger usando palabra clave Order con múltiples triggers
- Practicar uso de sintaxis {fieldname*N}, {fieldname*O}, y {fieldname*C} en triggers de ObjectScript
- Llamar procedimientos almacenados usando sentencia CALL y usar funciones almacenadas en consultas SELECT
- Examinar métodos generados (Execute, Fetch, Close) para procedimientos almacenados de consulta