Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-09-2012
davchi davchi is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 6
Poder: 0
davchi Va por buen camino
Eficiencia en Tabla

Hola a todos, se que no es un foro de visual basic 6, pero como uso FIREBIRD tal ves me puedan ayudar

Resulta que tengo la siguiente consulta:

Código:
Select c.id_contratos, c.fecha, c.paciente, c.obra_social_paciente, c.edad, c.feriado, c.nocturno, c.fin_semana, c.urgencia_diurna, c.edad_extrema, c.operacion_suspendida, 
n.codigo AS cod1, n.descripcion AS descripcion1, n.complejidad AS comp1, c.bilateral1, c.multiple1, c.via1, n2.codigo AS cod2, n2.descripcion AS descripcion2, n2.complejidad AS comp2, c.bilateral2, c.multiple2, c.via2, n3.codigo AS cod3, n3.descripcion AS descripcion3, n3.complejidad AS comp3, c.bilateral3, c.multiple3, c.via3, n4.codigo AS cod4, n4.descripcion AS descripcion4, n4.complejidad AS comp4, c.bilateral4, c.multiple4, c.via4, n5.codigo AS cod5, n5.descripcion AS descripcion5, n.complejidad AS comp5, c.bilateral5, c.multiple5, c.via5, 
c.total_intervencion, c.anestesiologo1, c.cirujano1, c.cirujano2, c.paso,
p.nombre AS paciNombre, p.apellido AS paciApellido, p.fecha_nacimiento AS paciFechaNac, p.dni, 
a.nombre AS anesteNombre, a.apellido AS anesteApellido, rel.numero_afiliado, 
ci.nombre AS ciruNombre, ci.apellido AS ciruApellido, ci2.nombre AS ciruNombre2, ci2.apellido AS ciruApellido2, fa.porcentaje AS porcen, o.descripcion_complejidad 
FROM contratos c
INNER JOIN pacientes p ON (c.paciente = p.id_paciente) 
INNER JOIN rel_paciente rel ON (c.paciente = rel.id_paciente AND rel.id_obra_social = c.obra_social_paciente) 
INNER JOIN nomenclador n ON (c.intervencion1 = n.id_nomenclador) 
LEFT JOIN nomenclador n2 ON (c.intervencion2 = n2.id_nomenclador) 
LEFT JOIN nomenclador n3 ON (c.intervencion3 = n3.id_nomenclador) 
LEFT JOIN nomenclador n4 ON (c.intervencion4 = n4.id_nomenclador) 
LEFT JOIN nomenclador n5 ON (c.intervencion5 = n5.id_nomenclador) 
INNER JOIN anestesiologo a ON (c.anestesiologo1 = a.id_anestesiologo) 
LEFT JOIN cirujano ci ON (c.cirujano1 = ci.id_cirujano) 
LEFT JOIN cirujano ci2 ON (c.cirujano2 = ci2.id_cirujano) 
INNER JOIN facturado fa ON (c.id_contratos = fa.id_contrato) 
INNER JOIN obra_social o ON (c.obra_social_paciente = o.id_obra_social) 
WHERE c.id_contratos <> 1 AND c.paso = 3 Order By fecha, id_contratos ASC
y luego los cargo en una tabla:
Código:
cnn.Execute "INSERT INTO HISTORIAL_CRYSTAL " & "(FECHA,OBRA_SOCIAL,DNI,PACIENTE,EDAD,CODIGO,PROCEDIMIENTO,COMPLEJIDAD,OBSERVACIONES,ID_CIRUJANO,CIRUJANO,IMPORTE,ID_ANESTESIOLOGO,ANESTESIOLOGO) VALUES('" & _
Format$(!fecha, "yyyy/mm/dd") & "','" & !obra_social_paciente & "','" & _
ob & "','" & !paciApellido & " " & !paciNombre & "','" & _
edad & "','" & codigos & "','" & descripciones & "','" & _
complejidad & "','" & observaciones & "','" & !cirujano1 & "','" & _
cirujanos & "','" & Str$(CDbl(!total_intervencion * !porcen / 100)) & "','" & !anestesiologo1 & "','" & _
!anesteApellido & " " & !anesteNombre & "')"
Es media larga, y me han comentado que para que no sea tan lerda a la hora de pasar los datos a crystal reports podria hacer un Stored Procedure en FIREBIRD, pero estoy bastante perdido.

Me podrian echar una manito de como crear el PROCEDURE

Muchas Gracias
Responder Con Cita
  #2  
Antiguo 18-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, no se entiende nada en ese "galimatías"
De todas formas, si quieres/necesitas un stored procedure, deberías de describirnos las tablas involucradas y lo que quieres que haga, exactamente. No somos adivinos
Responder Con Cita
  #3  
Antiguo 18-09-2012
davchi davchi is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 6
Poder: 0
davchi Va por buen camino
Explicacion

Perdon por la pregunta que fue bastante confusa, paso a describir lo que necesito

TABLA -> CONTRATOS:
fecha, paciente, obra_social_paciente, edad, feriado, nocturno, fin_semana, urgencia_diurna, edad_extrema,
operacion_suspendida, bilateral1, multiple1, via1, bilateral2, multiple2, via2, bilateral13, multiple3, via3,
bilateral4, multiple4, via4, bilateral5, multiple5, via5, total_intervencion, anestesiologo1, cirujano1, cirujano2, paso

TABLA -> PACIENTES:
nombre, apellido, fecha_nacimiento, dni

TABLA -> REL_PACIENTE:
rel.numero_afiliado

TABLA -> OBRA_SOCIAL:
descripcion_complejidad

TABLA -> NOMENCLADOR:
codigo, descripcion, complejidad

TABLA -> ANESTESIOLOGO:
nombre, apellido

TABLA -> CIRUJANO:
nombre, apellido

TABLA -> FACTURADO:
porcentaje

Y lo que necesito que salga es

ID_CONTRATOS -> viene de CONTRATOS | id_contratos * campo INTEGER
FECHA_CONTRATO -> viene de la tabla CONTRATOS | fecha *campo DATE
ID_OBRA_SOCIAL -> viene desde CONTRATOS | obra_social_paciente * campo INTEGER
NUMERO_AFILIADO -> viene desde REL_PACIENTE y PACIENTE | INNER JOIN rel_paciente rel ON (c.paciente = rel.id_paciente AND rel.id_obra_social = c.obra_social_paciente) * campo BLOB
NOMBRE y APELLIDO -> viene desde PACIENTES | INNER JOIN pacientes p ON (c.paciente = p.id_paciente) * campo VARCHAR(50)
EDAD -> viene desde CONTRATOS | edad * campo CHAR(5)
CODIGO -> viene desde CONTRATOS y NOMENCLADOR | INNER JOIN nomenclador n ON (c.intervencion1 = n.id_nomenclador) * CAMPO BLOB y son 5 codigos uno bajo el otro
PROCEDIMIENTO -> viene desde CONTRATOS y NOMENCLADOR | INNER JOIN nomenclador n ON (c.intervencion1 = n.id_nomenclador) * CAMPO BLOB y son 5 codigos uno bajo el otro
COMPLEJIDAD -> viene desde CONTRATOS y NOMENCLADOR | INNER JOIN nomenclador n ON (c.intervencion1 = n.id_nomenclador) * CAMPO BLOB y son 5 codigos uno bajo el otro
OBSERVACIONES -> viene desde CONTRATOS feriado, nocturno, fin_semana, urgencia_diurna, edad_extrema, bilateral1, multiple1, via1, bilateral2, multiple2, via2, bilateral13, multiple3, via3, bilateral4, multiple4, via4, bilateral5, multiple5, via5 * CAMPO BLOB bajo el otro
ID_CIRUJANO -> viene desde CONTRATOS | cirujano1 * campo INTEGER
CIRUJANO -> viene de CONTRATOS y CIRUJANO | LEFT JOIN cirujano ci ON (c.cirujano1 = ci.id_cirujano) y LEFT JOIN cirujano ci2 ON (c.cirujano2 = ci2.id_cirujano) | campo BLOB
IMPORTE -> viene desde CONTRATOS | total_intervencion * campo DOUBLE PRECISION
ID_ANESTESIOLOGO -> viene desde CONTRATOS | anestesiologo1 * campo BLOB
ANESTESIOLOGO -> viene de CONTRATOS y ANESTESIOLOGO | LEFT JOIN cirujano ci ON (c.cirujano1 = ci.id_cirujano) * campo BLOB
PORCENTAJE -> viene desde FACTURADO | INNER JOIN facturado fa ON (c.id_contratos = fa.id_contrato) * campo INTEGER
DESCRIPCION_COMPLEJIDAD -> viene desde OBRA_SOCIAL | INNER JOIN obra_social o ON (c.obra_social_paciente = o.id_obra_social) * campo VARCHAR(10)

Espero no haber confundido mas las cosas
Responder Con Cita
  #4  
Antiguo 18-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
O sea, ¿quieres un select para extraer esos datos, no un stored procedure?
¿O acaso lo que quieres es una vista?
Responder Con Cita
  #5  
Antiguo 19-09-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Casimiro, lo que creo que quiere hacer es un select en el store procedure, para este ejemplo, paso a dar un ejemplo de mis procedimientos de consultas en firebird, espero te ayude en algo.

Código SQL [-]
SET TERM ^ ;
CREATE PROCEDURE SP_LISTAR_INDICADORES (
    FECHA_INICIAL TYPE OF FECHA,
    FECHA_FINAL TYPE OF FECHA,
    USU_UUID_IN TYPE OF UUID_CHAR )
RETURNS (
    FECHA TYPE OF DESCRIPCION,
    USUARIO TYPE OF DESCRIPCION,
    CENTRO_OPERATIVO TYPE OF DESCRIPCION,
    TIPO_USUARIO TYPE OF DESCRIPCION,
    MAQUINA TYPE OF DESCRIPCION,
    TIPO_MAQUINA TYPE OF DESCRIPCION,
    DELGADOS TYPE OF CANTIDAD,
    CRUDOS TYPE OF CANTIDAD,
    MELAMINA TYPE OF CANTIDAD,
    DELGADO TYPE OF CANTIDAD,
    RIGIDO TYPE OF CANTIDAD,
    COMENTARIO TYPE OF "PASSWORD" )
AS
BEGIN
FOR SELECT
    CASE (EXTRACT(MONTH FROM I.IND_FECHA))
    WHEN 1 THEN 'ENERO'
    WHEN 2 THEN 'FEBRERO'
    WHEN 3 THEN 'MARZO'
    WHEN 4 THEN 'ABRIL'
    WHEN 5 THEN 'MAYO'
    WHEN 6 THEN 'JUNIO'
    WHEN 7 THEN 'JULIO'
    WHEN 8 THEN 'AGOSTO'
    WHEN 9 THEN 'SEPTIEMBRE'
    WHEN 10 THEN 'OCTUBRE'
    WHEN 11 THEN 'NOVIEMBRE'
    WHEN 12 THEN 'DICIEMBRE'
    END,
    U.USU_NOMBRE,
    '#'||U.USU_CENTRO_OPERATIVO,
    TU.TIPO_USU_NOMBRE,
    M.MAQ_NOMBRE,
    TM.TIPO_MAQ_NOMBRE,
    SUM(COALESCE(I.IND_DELGADOS,0)),
    SUM(COALESCE(I.IND_CRUDOS,0)),
    SUM(COALESCE(I.IND_LAMINA,0)),
    SUM(COALESCE(I.IND_DELGADO,0)),
    SUM(COALESCE(I.IND_RIGIDO,0)),
    'LOS VALORES SON LA SUMATORIA DE LOS MOVIMIENTOS DEL MES.'
FROM
    TBLINDICADORES I
    INNER JOIN TBLUSUARIOS U ON I.USU_UUID = U.USU_UUID
    INNER JOIN TBLTIPOUSUARIO TU ON U.TIPO_USU = TU.TIPO_USU_UUID
    INNER JOIN TBLMAQUINAS M ON I.MAQ_UUID = M.MAQ_UUID
    INNER JOIN TBLTIPOMAQUINA TM ON M.TIPO_MAQ_UUID = TM.TIPO_MAQ_UUID 
WHERE
    I.IND_FECHA BETWEEN :FECHA_INICIAL AND :FECHA_FINAL
    AND I.USU_UUID = COALESCE(CHAR_TO_UUID(:USU_UUID_IN), I.USU_UUID)
GROUP BY
    EXTRACT(MONTH FROM I.IND_FECHA),
    U.USU_NOMBRE, U.USU_CENTRO_OPERATIVO, TU.TIPO_USU_NOMBRE,
    M.MAQ_NOMBRE, TM.TIPO_MAQ_NOMBRE
INTO
    :FECHA,
    :USUARIO,
    :CENTRO_OPERATIVO,
    :TIPO_USUARIO,
    :MAQUINA,
    :TIPO_MAQUINA,
    ELGADOS,
    :CRUDOS,
    :MELAMINA,
    ELGADO,
    :RIGIDO,
    :COMENTARIO
DO
BEGIN
  SUSPEND;
END
END^
SET TERM ; ^

GRANT EXECUTE
 ON PROCEDURE SP_LISTAR_INDICADORES TO  SYSDBA;

Los parámetros de entrada son:
FECHA_INICIAL
FECHA_FINAL
USU_UUID_IN
Los que se encuentran dentro de RETURNS (...), son los parámetros de salida, es decir, un select en un sp en Firebird, requiere que las columnas sean entregadas a parámetros de salida.

Saludos.
__________________
mas confundido que Garavito el día del Niño.

Última edición por mightydragonlor fecha: 19-09-2012 a las 04:10:26. Razón: Arreglos menores =)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Eficiencia de Zeos camiz Conexión con bases de datos 13 11-07-2012 19:15:53
Eficiencia indices?¿? Como sacar lo mejor? CHiCoLiTa SQL 5 07-09-2010 04:25:04
Sistema de Notificacion de Produccion y Eficiencia Fiebru Debates 0 04-01-2010 15:18:10
La eficiencia de una conexión ADO gcaffe Conexión con bases de datos 1 24-05-2007 18:03:26
Eficiencia master/detail Luis Castillo Conexión con bases de datos 2 08-11-2005 18:25:04


La franja horaria es GMT +2. Ahora son las 07:59:13.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi