Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

stored procedure

Estas en el tema de stored procedure en el foro de SQL Server en Foros del Web. estoy creando un stored procedure y ya declare las variables pero de igual forma me sigue dando los errores este es mi codigo: Código: DROP ...
  #1 (permalink)  
Antiguo 20/09/2011, 11:41
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 7 meses
Puntos: 4
Sonrisa stored procedure

estoy creando un stored procedure y ya declare las variables pero de igual forma me sigue dando los errores
este es mi codigo:
Código:
DROP PROCEDURE dbo.presupuesto_prueba
GO
CREATE PROCEDURE presupuesto_prueba
@acc_cod int,
@cod_acesp int,
@arr_centro_proy_id int,
@id_item varchar (40),
@an_o_actual int
@i_fecha_ini datetime,
@i_fecha_fin datetime,
@i_item varchar(40),
@i_year int
AS declare
	@iditem varchar(40),
	@i_fecha_ini datetime
        @iditem2 varchar(41),
	@monto_prog_fec decimal(19, 4),
	@monto_prog_anual decimal(19, 4)  ,
	@monto_ced decimal(19, 4)  ,
	@monto_rec decimal(19, 4)  ,
	@monto_ajust decimal(19, 4)  ,
	@neto_prec decimal(19, 4)  ,
	@ejec_prec decimal(19, 4)  ,
	@disp_prec decimal(19, 4)  ,
	@compromiso decimal(19, 4)  ,
	@causado decimal(19, 4)  ,
	@pagado decimal(19, 4)  ,
	@disponible decimal(19, 4)  
TRUNCATE TABLE PRESUPUESTO
set @iditem2 = rtrim(@iitem) +'%'
INSERT PRESUPUESTO
SELECT 
       id_item,
       nombre,
       consolidada
  FROM SIPREFII_Partidas
 WHERE ID_ITEM LIKE @iditem2
   AND ANNO_INI=2006
declare TEMP_DISPO_PRESU cursor for
 select 
	id_item
   from PRESUPUESTO
--for update
open DISPO_PRESU 
fetch next from DISPO_PRESU
into @iditem
while @@fetch_status = 0
begin
        set @iditem2 = rtrim(@iditem) +'%'
	--update PRESUPUESTO
           set @monto_prog_fec = (SELECT ISNULL(SUM(pacc_monto),0) as tpres 
                                   FROM SIPREFII_Proy_Acc_pres a,SIPREFII_PARTIDAS b 
                                  WHERE a.ID_ITEM LIKE @iditem2
                                    AND a.pre_an_o=@i_year 
                                    AND a.ID_ITEM=b.ID_ITEM 
                                    AND b.CONSOLIDADA<>'1' 
                                    AND a.pacc_mes BETWEEN MONTH(@i_fecha_ini) AND MONTH(@i_fecha_fin))
                                +
                                (SELECT ISNULL(SUM(pac_monto),0) as tpres 
                                   FROM SIPREFII_AC_pres a,SIPREFII_PARTIDAS b 
                                  WHERE a.ID_ITEM LIKE @iditem2 
                                    AND a.ID_ITEM=b.ID_ITEM 
                                    AND b.CONSOLIDADA<>'1' 
                                    AND a.POA=@i_year 
                                    AND a.pac_mes BETWEEN MONTH(@i_fecha_ini) AND MONTH(@i_fecha_fin))
	  set  @monto_prog_anual=(SELECT ISNULL(SUM(pac_monto),0) as tpres 
                                   FROM SIPREFII_AC_pres a,SIPREFII_PARTIDAS b 
                                  WHERE a.ID_ITEM LIKE @iditem2
                                    AND a.ID_ITEM=b.ID_ITEM 
                                    AND b.CONSOLIDADA<>'1' 
                                    AND a.POA=@i_year 
                                    AND a.pac_mes BETWEEN 1 and 12)+
                                (SELECT ISNULL(SUM(pacc_monto),0) as tpres 
                                   FROM SIPREFII_Proy_Acc_pres a,SIPREFII_PARTIDAS b 
                                  WHERE a.ID_ITEM LIKE @iditem2 
                                    AND a.pre_an_o=@i_year 
                                    AND a.ID_ITEM=b.ID_ITEM 
                                    AND b.CONSOLIDADA<>'1' 
                                    AND a.pacc_mes BETWEEN 1 and 12) --, 
            set  @monto_ced       =(SELECT ISNULL(sum(b.monto),0) as suma 
  				   FROM SIPREFII_traspaso a,
                                        SIPREFII_traspaso_dt b 
                                  WHERE a.pres_ano=b.pres_ano 
                                    AND a.pres_ano=@i_year
                                    AND a.modi_cod=b.modi_cod 
                                    AND a.modi_fecha BETWEEN @i_fecha_ini AND i_fecha_fin 
   				    AND modi_activo=1 
                                    AND ced_rec_tipo='1' 
                                    AND id_item like @iditem2)
           set   @monto_rec       =(SELECT ISNULL(sum(b.monto),0) as suma 
  				   FROM SIPREFII_traspaso a,
                                        SIPREFII_traspaso_dt b 
                                  WHERE a.pres_ano=b.pres_ano 
                                    AND a.pres_ano=@i_year
                                    AND a.modi_cod=b.modi_cod 
                                    AND a.modi_fecha BETWEEN @i_fecha_ini AND i_fecha_fin 
   				    AND modi_activo=1 
                                    AND ced_rec_tipo='0' 
                                    AND id_item like @iditem2)
            set   @neto_prec        =(SELECT ISNULL(SUM(b.monto),0) as suma 
                                    FROM SIPREFII_Precompromiso a,SIPREFII_Precompromiso_dt b 
                                   WHERE a.pres_ano=b.pres_ano 
                                     AND a.pres_ano=@i_year 
                                     AND a.prec_cod=b.prec_cod 
                                     AND a.prec_fecha BETWEEN @i_fecha_ini AND i_fecha_fin 
                                     AND prec_activo=1 
                                     AND b.id_item LIKE @iditem2)
           set    @ejec_prec        =(select isnull(sum(monto),0) 
                                    from SIPREFII_Causado_dt a,
                                         SIPREFII_Causado b
                                   where a.caus_cod = b.caus_cod
                                     and a.pres_ano = b.pres_ano
                                     and a.pres_ano = @i_year
                                     and comp_cod in (select a.comp_cod 
                                                        from SIPREFII_Compromiso a,
                                                             SIPREFII_Compromiso_dt b
                                                       where a.comp_cod = b.comp_cod
                                                        and a.pres_ano = b.pres_ano
                                                        and a.pres_ano = @i_year
                                                        and a.comp_activo = 1
                                                        and a.comp_cod in (select a.prec_cod 
                                                                             from SIPREFII_Precompromiso a,
                                                                                  SIPREFII_PreCompromiso_dt b
                                                                            where a.prec_cod = b.prec_cod
                                                                              and a.pres_ano = b.pres_ano
                                                                              and a.prec_activo = 1
                                                                              and a.pres_ano = @i_year))
                                      AND b.caus_fecha BETWEEN @i_fecha_ini AND @i_fecha_fin  
                                      and caus_activo = 1
                                      and a.id_item like @iditem2)
           set  @compromiso        =(SELECT ISNULL(SUM(b.monto),0) as suma 
                                    FROM SIPREFII_Compromiso a,
                                         SIPREFII_Compromiso_dt b 
                                   WHERE a.pres_ano=b.pres_ano 
                                     AND a.pres_ano=@i_year
                                     AND a.comp_cod=b.comp_cod 
                                     AND a.comp_fecha BETWEEN @i_fecha_ini AND @i_fecha_fin 
                                     AND comp_activo=1 
                                     AND b.id_item LIKE @iditem2)
          set    @causado             =(SELECT ISNULL(SUM(b.monto),0) as suma 
                                     FROM SIPREFII_Causado a,
                                          SIPREFII_Causado_dt b 
                                    WHERE a.pres_ano=b.pres_ano 
                                      AND a.pres_ano=@i_year 
                                      AND a.caus_cod=b.caus_cod 
                                      AND a.caus_fecha BETWEEN @i_fecha_ini AND @i_fecha_fin 
                                      AND caus_activo=1 AND b.id_item LIKE @iditem2)
          set    @pagado              =(SELECT ISNULL(SUM(b.monto),0) as suma 
                                      FROM SIPREFII_Pagado a,
                                           SIPREFII_Pagado_dt b 
                                     WHERE a.pres_ano=b.pres_ano 
                                       AND a.pres_ano=2010 
                                       AND a.paga_cod=b.paga_cod 
                                       AND a.paga_fecha BETWEEN @i_fecha_ini AND @i_fecha_fin  
                                       AND paga_activo=1 AND b.id_item LIKE @iditem2)
        --where current of DISPO_PRESU*/
        select @iditem, @monto_prog_fec, @monto_prog_anual, @monto_ced,@monto_rec,@neto_prec,@ejec_prec,0,@compromiso,@causado,@pagado,0
	fetch next from DISPO_PRESU
	into @iditem
end
close DISPO_PRESU
deallocate DISPO_PRESU
/*update PRESUPUESTO
   set monto_ajust = monto_prog_anual + monto_rec - monto_ced,
       disp_prec  = neto_prec - ejec_prec*/
select * 
  from PRESUPUESTO
GO
y los errores que me dan son:

Server: Msg 3701, Level 11, State 5, Line 1
No se puede drop procedimiento 'dbo.presupuesto_prueba' porque no existe en el catálogo del sistema.
Server: Msg 170, Level 15, State 1, Procedure presupuesto_prueba, Line 8
Línea 8: sintaxis incorrecta cerca de '@i_fecha_ini'.
Server: Msg 137, Level 15, State 1, Procedure presupuesto_prueba, Line 90
Debe declarar la variable '@i_year'.
Procedure presupuesto_prueba, Line 160
Debe declarar la variable '@i_fecha_ini'.
Server: Msg 137, Level 15, State 1, Procedure presupuesto_prueba, Line 165
Debe declarar la variable '@monto_prog_fec'.
  #2 (permalink)  
Antiguo 20/09/2011, 11:52
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: stored procedure

Para empezar, en tu analizador de consultas tienes un VERIFICADOR de codigo, donde te va marcando, donde esta tu ERROR (por cierto, no habla, si no te dijera)

"Oye, aqui te hace falta una coma ,"

@an_o_actual int

"Aca, tambien te hace falta una coma ,"

@i_fecha_ini datetime

"Oye, no puedes declarar 2 veces la misma variable"

ETC, ETC, ETC......
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 20/09/2011, 12:20
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: stored procedure

si gracias esos errores ya los vi... y los resolvi ahora tengo problema con el DROP PROCEDURE
  #4 (permalink)  
Antiguo 20/09/2011, 13:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: stored procedure

Hola yamiblancoc:

El error es claro, NO PUEDES BORRAR ALGO QUE NO EXISTA EN LA BD. es decir, no tiene caso que pongas las dos primeras líneas del script:

Código:
DROP PROCEDURE dbo.presupuesto_prueba
GO
Una vez que está creado el procedimiento, si tienes necesidad de realizar modificaciones utilizas ALTER en lugar de CREATE...

También creo que te falta la palabra reservada BEGIN entre las palabras AS y DECLARE:

Código:
AS 
BEGIN
declare 	@iditem varchar(40),
...
...
...
Saludos
Leo.
  #5 (permalink)  
Antiguo 20/09/2011, 15:40
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: stored procedure

Con su correspondiente END al final del codigo
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 21/09/2011, 08:11
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: stored procedure

el END si lo tiene:

Código:
   ...
   ...
   into @iditem
end
Lo que falta es el BEGIN al inicio.

Saludos
Leo.
  #7 (permalink)  
Antiguo 21/09/2011, 08:16
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: stored procedure

leonardo_josue, tienes mucha razon no puedo borrar algo que no existe en la base de datos, pero ya solucione, cree el dbo.presupuesto_prueba y ya no tengo problemas...

Muchisimas gracias,

Etiquetas: fecha, procedimiento, procedure, select, server, stored
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:50.