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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2008
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 21
jzginez Va por buen camino
Question usar vista o procedimiento almacenado

Hola amigos necesito su opinión experta, estoy usando firebird 2 lo que quiero saber para ustedes que es mejor usar una vista o un procedimiento almacenado, tengo la siguiente vista:

Código SQL [-]
CREATE VIEW NEW_VIEW(
    ID,
    FECHA,
    ID_PROVEEDOR,
    APENOM,
    ID_COMPRA,
    FECHAVENTA,
    ID_DOCUMENTO,
    DESC_DOCUMENTO,
    NUMDOCUMENTO,
    SUBTOTAL,
    ID_IMPUESTO,
    DESC_IMPUESTO,
    PORCEIMPU,
    IMPUESTO,
    TOTAL)
AS
SELECT
    T_DEVOLUCIONESPROVEEDOR.ID,
    T_DEVOLUCIONESPROVEEDOR.FECHA,
    T_DEVOLUCIONESPROVEEDOR.ID_PROVEEDOR,
    T_PROVEEDORES.APENOM,
    T_DEVOLUCIONESPROVEEDOR.ID_COMPRA,
    T_COMPRAS.FECHA,
    T_COMPRAS.ID_DOCUMENTO,
    T_DOCUMENTOS.DESCRIPCION,
    T_COMPRAS.NUMDOCUMENTO,
    /**********************/
    (select sum(v_detalledevolprovee.total) 
      from v_detalledevolprovee 
     where v_detalledevolprovee.id_devolucion = T_DEVOLUCIONESPROVEEDOR.ID),
    /**********************/
    T_DEVOLUCIONESPROVEEDOR.ID_IMPUESTO,
    T_IMPUESTOS.DESCRIPCION,
    T_DEVOLUCIONESPROVEEDOR.PORCEIMPU,
    /**********************/
    ((select sum(v_detalledevolprovee.total) 
       from v_detalledevolprovee 
      where v_detalledevolprovee.id_devolucion = T_DEVOLUCIONESPROVEEDOR.ID) * T_DEVOLUCIONESPROVEEDOR.PORCEIMPU),
    /**********************/
    ((select sum(v_detalledevolprovee.total) 
       from v_detalledevolprovee 
      where v_detalledevolprovee.id_devolucion = T_DEVOLUCIONESPROVEEDOR.ID) + 
      ((select sum(v_detalledevolprovee.total) 
          from v_detalledevolprovee 
        where v_detalledevolprovee.id_devolucion = T_DEVOLUCIONESPROVEEDOR.ID) * T_DEVOLUCIONESPROVEEDOR.PORCEIMPU))
    /**********************/

FROM T_DEVOLUCIONESPROVEEDOR
   INNER JOIN T_PROVEEDORES ON (T_DEVOLUCIONESPROVEEDOR.ID_PROVEEDOR = T_PROVEEDORES.ID)
   INNER JOIN T_COMPRAS ON (T_DEVOLUCIONESPROVEEDOR.ID_COMPRA = T_COMPRAS.ID)
   INNER JOIN T_DOCUMENTOS ON (T_COMPRAS.ID_DOCUMENTO = T_DOCUMENTOS.ID)
   INNER JOIN T_IMPUESTOS ON (T_DEVOLUCIONESPROVEEDOR.ID_IMPUESTO = T_IMPUESTOS.ID)
;

y el siguente procedimiento:
Código SQL [-]
CREATE PROCEDURE V_DEVOLUCIONESPROVEEDOR 
RETURNS (
    ID INTEGER,
    FECHA DATE,
    ID_PROVEEDOR INTEGER,
    APENOM VARCHAR(123),
    ID_COMPRA INTEGER,
    FECHACOMPRA DATE,
    ID_DOCUMENTO INTEGER,
    DESC_DOCUMENTO VARCHAR(20),
    NUMDOCUMENTO INTEGER,
    SUBTOTAL DECIMAL(15,2),
    ID_IMPUESTO INTEGER,
    DESC_IMPUESTO VARCHAR(10),
    PORCEIMPU DECIMAL(18,2),
    IMPUESTO DECIMAL(15,2),
    TOTAL DECIMAL(15,2))
AS
BEGIN
  FOR
    SELECT 
               T_DEVOLUCIONESPROVEEDOR.ID, 
               T_DEVOLUCIONESPROVEEDOR.FECHA, 
               T_DEVOLUCIONESPROVEEDOR.ID_PROVEEDOR, 
               T_PROVEEDORES.APENOM, 
               T_DEVOLUCIONESPROVEEDOR.ID_COMPRA, 
               T_COMPRAS.FECHA, 
               T_COMPRAS.ID_DOCUMENTO, 
               T_DOCUMENTOS.DESCRIPCION, 
               T_COMPRAS.NUMDOCUMENTO, 
               T_DEVOLUCIONESPROVEEDOR.ID_IMPUESTO, 
               T_IMPUESTOS.DESCRIPCION, 
               T_DEVOLUCIONESPROVEEDOR.PORCEIMPU
    FROM T_DEVOLUCIONESPROVEEDOR
       INNER JOIN T_PROVEEDORES ON (T_DEVOLUCIONESPROVEEDOR.ID_PROVEEDOR = T_PROVEEDORES.ID)
       INNER JOIN T_COMPRAS ON (T_DEVOLUCIONESPROVEEDOR.ID_COMPRA = T_COMPRAS.ID)
       INNER JOIN T_DOCUMENTOS ON (T_COMPRAS.ID_DOCUMENTO = T_DOCUMENTOS.ID)
       INNER JOIN T_IMPUESTOS ON (T_DEVOLUCIONESPROVEEDOR.ID_IMPUESTO = T_IMPUESTOS.ID)
    INTO :ID,
         :FECHA,
         :ID_PROVEEDOR,
         :APENOM,
         :ID_COMPRA,
         :FECHACOMPRA,
         :ID_DOCUMENTO,
         : DESC_DOCUMENTO,
         :NUMDOCUMENTO,
         :ID_IMPUESTO,
         : DESC_IMPUESTO,
         :PORCEIMPU
  DO
  BEGIN
    select sum(v_detalledevolprovee.total) from v_detalledevolprovee where v_detalledevolprovee.id_devolucion = :ID into :SUBTOTAL;
    impuesto = subtotal * porceimpu / 100;
    total = subtotal + impuesto;
    SUSPEND;
  END
END
los 2 hacen y funcionan exactamente igual, pero ustedes que prefieren usar, el procedimiento a mi me gusta mas porque se pueden usar variables encambio en la vista tengo que volver a escribir las subconsultas para cada vez que las necesitene, pero en cuestion de rendimiento que me aconsejan usar ustedes?

Gracias
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México

Última edición por jzginez fecha: 01-09-2008 a las 21:50:13.
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
procedimiento almacenado JAI_ME Varios 5 02-09-2008 16:24:58
Procedimiento almacenado efelix MS SQL Server 7 21-11-2007 17:53:00
Procedimiento almacenado LucianoRey MS SQL Server 2 23-08-2005 00:37:06
Que es más eficiente, un procedimiento almacenado o un select de una vista Carlitos Firebird e Interbase 7 27-10-2003 11:12:09
procedimiento almacenado haron Firebird e Interbase 2 29-09-2003 01:09:56


La franja horaria es GMT +2. Ahora son las 00:32:24.


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