Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/05/2012, 18:28
jglm210687
 
Fecha de Ingreso: julio-2008
Mensajes: 56
Antigüedad: 16 años, 4 meses
Puntos: 2
Pregunta error en un cursor con T-sql

Alguien que me ayude a ver donde esta el error en este cursor:
funciona
Código:
create database practicas

use practicas 

create table Empleado
(
	Codigo varchar (25) ,
	Nombres varchar(25),
	Salario money,
	primary key(Codigo),
	Codigo_Departamento int not null,
	constraint fk_empleado_departamento foreign key(Codigo_Departamento)
	references Departamento (codigo_depto)
);

create table Departamento
(
	codigo_depto int identity,
	Descripcion varchar(25),
	primary key(codigo_depto)
);

create table Planillas
(
	Cod_Emp varchar(25),
	Cod_planilla varchar(25),
	Periodo int,
	Fecha varchar(25),
	Fecha_pago varchar(25),
	Horas_trabajadas int,
	Salario_devengado money,
	Descuento_ISSS money,
	Descuento_AFP money,
	Total_descuentos money,
	Salario_liquido money,
	Nombre_departamento varchar(25)
	primary key (Cod_planilla),
	constraint fk_planilla_empleado foreign key (Cod_Emp) references
	Empleado (Codigo) on update cascade
);
     
SELECT * FROM Departamento

insert into Departamento(Descripcion)
values('Produccion');
insert into Departamento(Descripcion)
values('Calidad');
insert into Departamento(Descripcion)
values('Informatica');
insert into Departamento(Descripcion)
values('Recursos Humanos');
insert into Departamento(Descripcion)
values('Administracion');
   
insert into Empleado
(
	Codigo,
	Nombres,
	Salario,
	Codigo_Departamento
)
values
(
	'EM1',
	'Nestor Beteta',
	400,
	4
);
insert into Empleado
(
	Codigo,
	Nombres,
	Salario,
	Codigo_Departamento
)
values
(
	'EM2',
	'Carlos Garcia',
	500,
	5
);
insert into Empleado
(
	Codigo,
	Nombres,
	Salario,
	Codigo_Departamento
)
values
(
	'EM3',
	'Gustavo López',
	600,
	3
);
select*from Empleado
/*Leer los datos de la tabla EMPLEADOS con las columnas codigo,
 codigo,nombres, apellidos, salario y código departamento con Join a
 la tabla  de DEPARTAMENTOS, de aquí leer el código_depto y Descripcion y
 luego crear un cursor que permita calcular la planilla quincenal de
 N empleados que existen.*/

--JOIN DE EMPLEADO A DEPARTAMENTO
select E.Codigo, E.Nombres, E.Salario, E.Codigo_Departamento, D.Descripcion, D.codigo_depto
from Empleado AS E inner join
Departamento AS D ON
E.Codigo_Departamento=D.codigo_depto
where Codigo='EM3';

select*from Planillas

declare mipla cursor for select 
Cod_Emp, Cod_planilla, Periodo,Fecha,Fecha_pago,Horas_trabajadas,Salario_devengado,
Descuento_ISSS,Descuento_AFP,Total_descuentos,Salario_liquido,Nombre_departamento
from Planillas
open mipla
	declare @Cod_Emp as varchar(25)
	declare @Cod_planilla as varchar(25) 
	declare @Periodo as int
	declare @fecha as datetime
	declare @fecha_pago varchar (25) 
	declare @horas_trabajadas int
	declare @salario_devengado money 
	declare @descuento_ISSS money 
	declare @descuento_AFP money
	declare @total_descuentos money 
	declare @salario_liquido money 
	declare @nombre_departamento varchar(25)
	declare @salario money;
	declare @cod_Depart int
	declare @salario_hora money;
	declare @total_horas_trabajas_quincena int;
	fetch next from mipla 
	into 
	@Cod_Emp,@Cod_planilla,@Periodo,@fecha,@fecha_pago,@horas_trabajadas,@salario_devengado,
	@descuento_ISSS,@descuento_AFP,@total_descuentos,@salario_liquido,@nombre_departamento
	while @@fetch_status=0
	begin 
		SET @salario_hora=@salario/30/8
		SET @total_horas_trabajas_quincena = 88
		SET @Salario_Devengado= @salario_hora *  @total_horas_trabajas_quincena
		SET @Descuento_isss= @salario_devengado*2.5/100
		SET @Descuento_AFP= @salario_devengado*4.5/100
		SET @total_Descuentos= @Descuento_ISSS+@Descuento_AFP
		SET @Salario_liquido=@Salario_Devengado-@total_Descuentos
		set @Cod_planilla='1-05-2012'
		set @fecha_pago='15/05/2012'

		insert into planillas
		(
			Cod_Emp, Cod_planilla, Periodo,Fecha,Fecha_pago,Horas_trabajadas,Salario_devengado,
			Descuento_ISSS,Descuento_AFP,Total_descuentos,Salario_liquido,Nombre_departamento
		)
		VALUES
		(
			@Cod_Emp,@Cod_planilla,@Periodo,@fecha,@fecha_pago,@horas_trabajadas,@salario_devengado,
			@descuento_ISSS,@descuento_AFP,@total_descuentos,@salario_liquido,@nombre_departamento
		);
		fetch next from mipla
		into
			@Cod_Emp,@Cod_planilla,@Periodo,@fecha,@fecha_pago,@horas_trabajadas,@salario_devengado,
			@descuento_ISSS,@descuento_AFP,@total_descuentos,@salario_liquido,@nombre_departamento
	end
close mipla
deallocate mipla

select * from Planillas
Lo que deberia hacer es crear un registro en la tabla planilla.

Alguien que me ayude por favor.

Gracias.

Última edición por jglm210687; 16/05/2012 a las 18:43 Razón: Correccion de codigo