Tabla de Contenidos

Base de Datos - Multiempresa: Fondos (Fosemed)

Esta sección esta dedicada a los procesos de actualziación de script en los clientes multiempresa. Esta documentación aplica para el cliente Fosemed y aquellos que apliquen configuración multiempresa en la versión Oracle Dabatabse versión 11gR2 y posteriores donde el cliente se identifique por contexto en vistas.

Problema

Implementar multiempresa en una sola instancia de base de datos.

Solución

Implementar un modelo de vistas que extraigan infromación de tablas aplicando un filtrado por contexto.

Implementación Modelo

Reglas del modelo

Modelo de actualización de Scripts

A continuación se define el proceso de actualización según los siguientes tipos:

Actualización de estructuras DDL/PLSQL

Toda estructura DDL menos la modificación/agregacion de columnas en tablas se actualizan según las Reglas del modelo

Actualización de estructuras DML

Toda estructura DML (Insert,Update,Select,Delete) se ejecuta igual que los modelos uniempresa, sin embargo se debe ejecutar previamente el contexto según el siguiente script y empresa a afectar.

EXECUTE sicof.pkg_ctx_sicof.sp_nombre_variable('CODIGO_MEMPRESA','[Código de la Empresa]');

Actualización de estructuras DDL (Colummas en Tablas)

Las actualización de tablas requiere que se ejecuten los siguientes pasos:

Ejemplo

Se comparte el siguiente ejemplo de una actualización real del módulo de presupuesto.

--==============================================================================
-- Fecha: 3:27 p. m. domingo, 24 de julio de 2022 - carlos.torres@ada.co
-- Paso 1: Crear las columnas en la tabla
--==============================================================================
ALTER TABLE PRESUP02.FE_TIPO_FACTURA ADD (FECHA_FINAL_RESOLUCION DATE);
ALTER TABLE PRESUP02.FE_TIPO_FACTURA ADD (CLAVE_TECNICA VARCHAR2(256));
 
--==============================================================================
-- Fecha: 3:27 p. m. domingo, 24 de julio de 2022 - carlos.torres@ada.co
-- Paso 2: Ejecutar el script que genera un script de la vista actualizada de la tabla
--==============================================================================
SELECT  'CREATE OR REPLACE FORCE VIEW ' || REPLACE(X.OWNER, '02', '01') || '.' || X.TABLE_NAME  || ' AS SELECT * ' ||
        'FROM ' || X.OWNER || '.' || X.TABLE_NAME || ' T ' ||
        'WHERE t.codigo_mempresa IN (DECODE (SYS_CONTEXT (''CTX_SICOF'', ''CODIGO_MEMPRESA''),''9999999999'', ''-1'', SYS_CONTEXT (''CTX_SICOF'', ''CODIGO_MEMPRESA'')),''9999999999'') OR SYS_CONTEXT (''CTX_SICOF'', ''CODIGO_MEMPRESA'') = ''0'';' AS NEW_SYNTAX_SQL
FROM    SYS.ALL_ALL_TABLES X
WHERE   X.OWNER = 'PRESUP02'--aqui va el esquema de la tabla
AND     X.TABLE_NAME = 'FE_TIPO_FACTURA ';--Aqui va el nombre de la tabla
 
--==============================================================================
-- Fecha: 3:28 p. m. domingo, 24 de julio de 2022 - carlos.torres@ada.co
-- Paso 3: Ejecutar el script de la vista actualizada contenido en la columna NEW_SYNTAX_SQL
-- del paso 2
--==============================================================================
CREATE OR REPLACE FORCE VIEW PRESUP01.FE_TIPO_FACTURA
AS
   SELECT *
     FROM PRESUP02.FE_TIPO_FACTURA T
    WHERE    t.codigo_mempresa IN
                (DECODE (SYS_CONTEXT ('CTX_SICOF', 'CODIGO_MEMPRESA'),
                         '9999999999', '-1',
                         SYS_CONTEXT ('CTX_SICOF', 'CODIGO_MEMPRESA')),
                 '9999999999')
          OR SYS_CONTEXT ('CTX_SICOF', 'CODIGO_MEMPRESA') = '0';

Notas del Proceso

←Volver atras