Ver Mensaje Individual
  #9  
Antiguo 14-09-2005
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Reputación: 24
Crandel Va por buen camino
Hola rastafarey, perdona que recien conteste a esta hora, la verdad es que hoy fue un día dificil y largo.

Bueno, La idea es crear una DB llamada PRUEBA o lo que sea, genere una mini DB para simular el problema que tengo sin perder tiempo en el resto.

Este es el código para generar la DB
Código SQL [-]
/* Creamos las tablas MOV_TEMP y MOV_FINAL
   ======================================= */
CREATE TABLE MOV_TEMP (
    ID_MOV INTEGER NOT NULL PRIMARY KEY, 
    REF_CARGO INTEGER NOT NULL,
    ENTRADA TIMESTAMP DEFAULT 'now' NOT NULL,
    SALIDA TIMESTAMP);

CREATE TABLE MOV_FINAL (
    ID_MOV INTEGER NOT NULL PRIMARY KEY, 
    REF_CARGO INTEGER NOT NULL,
    ENTRADA TIMESTAMP DEFAULT 'now' NOT NULL,
    SALIDA TIMESTAMP);
    
/* Generador para el ID */   
CREATE GENERATOR INC_MOV;
  
    
/* Declaramos la función externa */   
DECLARE EXTERNAL FUNCTION FIRSTDAYMONTH
   TIMESTAMP
   RETURNS TIMESTAMP
  ENTRY_POINT 'fn_firstdaymonth'  MODULE_NAME 'rfunc';
  
  
SET TERM ^ ;

/* Trigger que incrementa el ID */   
CREATE TRIGGER BI_MOV FOR MOV_TEMP
ACTIVE BEFORE INSERT AS
BEGIN
  MOV_TEMP.ID_MOV = gen_id(INC_MOV, 1);
END^

/* Procedimiento que me da error
  Es para mover los registros del mes anterior a la otra tabla */ 
CREATE PROCEDURE MOVER_MOV_TEMP_A_FINAL
AS
BEGIN
  INSERT INTO MOV_FINAL (ID_MOV, REF_CARGO, ENTRADA, SALIDA)
    SELECT * FROM MOV_TEMP
    WHERE SALIDA IS NOT NULL
    AND SALIDA < FIRSTDAYMONTH('NOW');

  DELETE FROM MOV_TEMP
    WHERE SALIDA IS NOT NULL
    AND SALIDA < FIRSTDAYMONTH('NOW');
END^

SET TERM ; ^
y con estas instrucciones la usamos
Código SQL [-]
/* Ejecutamos esto unas cuantas veces para generar datos */   
/* con ambas fechas */
INSERT INTO MOV_TEMP(REF_CARGO, ENTRADA, SALIDA)
VALUES(1, '2005/08/13 23:39:05', '2005/08/13 23:39:05');

INSERT INTO MOV_TEMP(REF_CARGO, ENTRADA)
VALUES(1, '2005/08/13 23:39:05');

INSERT INTO MOV_TEMP(REF_CARGO, ENTRADA)
VALUES(1, 'now');


/* Ejecuto el procedimiento */
EXECUTE PROCEDURE MOVER_MOV_TEMP_A_FINAL
Si ves el error te lo agradecería.
__________________
[Crandel]
Responder Con Cita