Club Delphi  
    Paypal   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

 
 
Herramientas Buscar en Tema Desplegado
  #32  
Antiguo 06-06-2007
Avatar de xander
xander xander is offline
Miembro
 
Registrado: jul 2006
Posts: 499
Poder: 20
xander Va por buen camino
En general un Procedimiento almacenado se ve, como algo como esto:

Código SQL [-]
CREATE PROCEDURE CERTIFICADODEUNIDAD (
    UNIDAD INTEGER,
    MES INTEGER,
    ANHO INTEGER)
RETURNS (
    INDRAIZ INTEGER,
    INDICADOR VARCHAR(200),
    RESULTADO VARCHAR(1000),
    LEYENDA VARCHAR(200),
    META VARCHAR(100),
    DIMENSION VARCHAR(200))
AS
DECLARE VARIABLE INDID INTEGER;
DECLARE VARIABLE VMES VARCHAR(15);
DECLARE VARIABLE VMUESTRA INTEGER;
DECLARE VARIABLE VTIPO INTEGER;
DECLARE VARIABLE VFILTRO VARCHAR(200);
DECLARE VARIABLE VLEYENDA VARCHAR(200);
BEGIN
   FOR SELECT IND_ID, IND_NOMBRE, DIM_NOMBRE, IND_TEXTOTITULO
    FROM EST_INIDICADOR
    LEFT JOIN EST_DIMENSION ON (IND_DIMENSION = DIM_ID)
    LEFT JOIN EST_SECUENCIA ON (SEC_INDICADOR = IND_ID)
    WHERE SEC_ANTECESOR = 0
    ORDER BY DIM_NOMBRE, SEC_ORDEN ASC
    INTO :INDRAIZ, :INDICADOR, IMENSION, :LEYENDA DO
    BEGIN
      /*CALCULAMOS PARA EL INDICADOR RAIZ */
      SELECT FIRST 1 MET_VALOR FROM EST_METAS
      WHERE MET_INDICADOR = :INDRAIZ
      ORDER BY MET_FECHAALTA DESC
      INTO :META;
      VFILTRO = 'AND (ENC_UNIDADMEDICA = ' || CAST( UNIDAD AS VARCHAR (10)) ||')';
      EXECUTE PROCEDURE GRAFICA(:INDICADOR, :MES, :ANHO, VFILTRO ,0, 0)
      RETURNING_VALUES :VMES, :RESULTADO, :VMUESTRA, :VTIPO;
      SUSPEND;

      FOR SELECT IND_ID, IND_NOMBRE
       FROM EST_INIDICADOR
       LEFT JOIN EST_SECUENCIA ON (SEC_INDICADOR = IND_ID)
       WHERE SEC_ANTECESOR = :INDRAIZ
       ORDER BY SEC_ORDEN ASC
       INTO :INDID, :INDICADOR DO
       BEGIN
         /*Y CALCULAMOS PARA LOS SUB-INDICADORES */
         SELECT FIRST 1 MET_VALOR FROM EST_METAS
         WHERE MET_INDICADOR = :INDID
         ORDER BY MET_FECHAALTA DESC
         INTO :META;
         VFILTRO ='AND (ENC_UNIDADMEDICA = ' || CAST( UNIDAD AS VARCHAR (10)) ||')';
         EXECUTE PROCEDURE GRAFICA(:INDICADOR, :MES, :ANHO, VFILTRO ,0, 0)
         RETURNING_VALUES :VMES, :RESULTADO, :VMUESTRA, :VTIPO;
         INDICADOR =  '             '|| :INDICADOR;
         SUSPEND;
       END
    END
END^

Es como un pequeño programa que ejecuta sentencias SQL... la ventaja es que se ejecuta dentro de la base de datos así que los datos no viajan del servidor al cliente para efectuarles el tratamiento... sino que se tratan en el servidor y se envía solo los resultados (en el caso que se tengan que devolver resultados).
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..."
Responder Con Cita
 



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
que hago mal? jvalles Gráficos 2 19-07-2005 14:45:06
Como las hago? jam888 Firebird e Interbase 7 06-05-2005 22:45:41
Como lo hago? danytorres SQL 4 08-06-2004 14:27:42
¿como lo hago? loenx Conexión con bases de datos 6 01-11-2003 15:26:34
Como lo hago¿ MANUEL OVAL SQL 6 31-10-2003 14:43:39


La franja horaria es GMT +2. Ahora son las 23:49:39.


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