Este es el storeprocedure lo que hace es mostrar sus marcaciones de asistencia el resultado se observa en la imagen en la parte de abajo.
http://www.subirimagenes.com/otros-m...1-6079805.html
Código SQL
[-]
CREATE PROCEDURE MARCACIONES_CODEMPELEADO(
INICIO DATE,
FINAL DATE,
CODIGO INTEGER)
RETURNS(
LINEA VARCHAR(30) CHARACTER SET NONE,
CODEMPLEADO INTEGER,
FECHA DATE,
NUM_DIA SMALLINT,
DIA VARCHAR(15) CHARACTER SET NONE,
ENTRADA0 TIMESTAMP,
SALIDA0 TIMESTAMP,
ENTRADA1 TIMESTAMP,
SALIDA1 TIMESTAMP,
ENTRADA2 TIMESTAMP,
SALIDA2 TIMESTAMP,
FALTA VARCHAR(1) CHARACTER SET NONE,
HORAS_ORD VARCHAR(10) CHARACTER SET NONE,
HORAS_25 VARCHAR(10) CHARACTER SET NONE,
HORAS_50 VARCHAR(10) CHARACTER SET NONE,
HORAS_75 VARCHAR(10) CHARACTER SET NONE,
HORAS_100 VARCHAR(10) CHARACTER SET NONE,
MINUTOS_ORD SMALLINT,
MINUTOS_25 SMALLINT,
MINUTOS_50 SMALLINT,
MINUTOS_75 SMALLINT,
MINUTOS_100 SMALLINT,
MINUTOS_ORD0 SMALLINT,
MINUTOS_ORD1 SMALLINT,
MINUTOS_ORD2 SMALLINT,
MINUTOS_250 SMALLINT,
MINUTOS_251 SMALLINT,
MINUTOS_252 SMALLINT,
MINUTOS_500 SMALLINT,
MINUTOS_501 SMALLINT,
MINUTOS_502 SMALLINT,
MINUTOS_750 SMALLINT,
MINUTOS_751 SMALLINT,
MINUTOS_752 SMALLINT,
MINUTOS_1000 SMALLINT,
MINUTOS_1001 SMALLINT,
MINUTOS_1002 SMALLINT)
AS
DECLARE VARIABLE FILA INTEGER;
DECLARE VARIABLE COLUMNA SMALLINT;
DECLARE VARIABLE XFECHA_HORA TIMESTAMP;
BEGIN
FOR
SELECT
MARCACIONES_RELOJ.CODEMPLEADO,
LINEA.LINEA
FROM
MARCACIONES_RELOJ
INNER JOIN LINEA ON (MARCACIONES_RELOJ.IDLINEA = LINEA.IDLINEA)
WHERE
FECHA BETWEEN :INICIO AND :FINAL AND MARCACIONES_RELOJ.CODEMPLEADO = :CODIGO
GROUP BY
MARCACIONES_RELOJ.CODEMPLEADO,
LINEA.LINEA
ORDER BY
LINEA.LINEA,
MARCACIONES_RELOJ.CODEMPLEADO
INTO
:CODEMPLEADO,
:LINEA
DO
BEGIN
Fila=1;
FECHA = INICIO;
WHILE (Fila<>8) DO
BEGIN
NUM_DIA=FILA;
COLUMNA=0;
ENTRADA0=NULL;
SALIDA0=NULL;
ENTRADA1=NULL;
SALIDA1=NULL;
ENTRADA2=NULL;
SALIDA2=NULL;
FOR
SELECT
FECHA_HORA
FROM
MARCACIONES_RELOJ
WHERE
MARCACIONES_RELOJ.CODEMPLEADO = :CODEMPLEADO AND MARCACIONES_RELOJ.FECHA = :FECHA
ORDER BY
MARCACIONES_RELOJ.FECHA_HORA
INTO
:XFECHA_HORA
DO
BEGIN
IF (COLUMNA = 0) THEN
ENTRADA0=XFECHA_HORA;
IF (COLUMNA = 1) THEN
SALIDA0=XFECHA_HORA;
IF (COLUMNA = 2) THEN
ENTRADA1=XFECHA_HORA;
IF (COLUMNA = 3) THEN
SALIDA1=XFECHA_HORA;
IF (COLUMNA = 4) THEN
ENTRADA2=XFECHA_HORA;
IF (COLUMNA = 5) THEN
SALIDA2=XFECHA_HORA;
COLUMNA = COLUMNA + 1;
END
IF (ENTRADA0 IS NULL) THEN FALTA = 'X'; ELSE FALTA='';
IF (NUM_DIA = 1) THEN DIA = 'LUNES';
IF (NUM_DIA = 2) THEN DIA = 'MARTES';
IF (NUM_DIA = 3) THEN DIA = 'MIERCOLES';
IF (NUM_DIA = 4) THEN DIA = 'JUEVES';
IF (NUM_DIA = 5) THEN DIA = 'VIERNES';
IF (NUM_DIA = 6) THEN DIA = 'SABADO';
IF (NUM_DIA = 7) THEN DIA = 'DOMINGO';
SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA0,:ENTRADA0) INTO MINUTOS_ORD0,MINUTOS_250,MINUTOS_500,MINUTOS_750, MINUTOS_1000;
SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA1,:ENTRADA1) INTO MINUTOS_ORD1,MINUTOS_251,MINUTOS_501,MINUTOS_751, MINUTOS_1001;
SELECT MINUTOS_ORD, MINUTOS_25, MINUTOS_50, MINUTOS_75, MINUTOS_100 FROM HORAS_ORDINARIA_EXTRA(:SALIDA2,:ENTRADA2) INTO MINUTOS_ORD2,MINUTOS_252,MINUTOS_502,MINUTOS_752, MINUTOS_1002;
MINUTOS_ORD = MINUTOS_ORD0 + MINUTOS_ORD1 + MINUTOS_ORD2;
MINUTOS_25 = MINUTOS_250 + MINUTOS_251 + MINUTOS_252;
MINUTOS_50 = MINUTOS_500 + MINUTOS_501 + MINUTOS_502;
MINUTOS_75 = MINUTOS_750 + MINUTOS_751 + MINUTOS_752;
MINUTOS_100 = MINUTOS_1000 + MINUTOS_1001 + MINUTOS_1001;
SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_ORD) INTO HORAS_ORD;
SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_25) INTO HORAS_25;
SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_50) INTO HORAS_50;
SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_75) INTO HORAS_75;
SELECT HORAS FROM MINUTOS_A_HORA(:MINUTOS_100) INTO HORAS_100;
SUSPEND;
FECHA = INICIO + FILA;
Fila = Fila + 1;
END
END
END