Ayuda con un procedimiento almacenado

Necesito ayuda amigos.
Necesito crear un procedimiento almacenado en el cual se inserte un aula, en la cual el código del aula este formado por
Turno 1=mañana
Turno 2=tarde
Ciclo puede ser :1,2,3
Especialidad,puede ser: CI =Computación e informática,
DG=Diseño Gráfico
Por ejemplo si inserto un aula el código se debe formar de la siguiente manera :
21004CI
El primer numero que es 2, indicaría el turno que en este caso indica que es el turno tarde, el segundo numero que es 1 indicaría el ciclo que en este caso seria primer ciclo, los tres números siguientes son números correlativos según el orden de inserción de aula, en este caso seria el aula insertada numero 4, claro esta que el numero de aula no debe sobrepasar las 100, y las 2ultimas letras son de la especialización en este caso indica que es computación e informática.
Aquí les dejo la base de datos por si alguien se anima a ayudarme. Gracias de antemano:
Create database uni
go
Use uni
go
create table especialidad(
codesp char(2) primary key ,
nombre varchar(35)not null)
go
create table aula(
codaula char(7)primary key ,
capacidad int not null,
fechini smalldatetime not null,
turno varchar(10)not null,
ciclo char(1)not null,
codesp char(2) foreign key references especialidad)
go
create table alumno(
codalu char(4)primary key,
nombre varchar (30)not null,
sexo char(1) check(sexo='m'or sexo='f')not null,
edad int not null
)
go
create table matricula(
codmat char(4)not null,
fechmat smalldatetime not null,
pago money not null,
codaula char(7) foreign key references aula,
codalu char(4) foreign key references alumno)
go
select*from alumno
select * from aula
select * from especialidad
select *from matricula
go

1 Respuesta

Respuesta
1
create procedure inserta_aulas @turno smallint, @capacidad int, @fechaini datetime, @ciclo smallint, @cod_esp char(2)
AS
Begin
Declare @cod_aula varchar(7)
declare @ultima_aula int 
declare @digitos_ultima_aula int
select @ultima_aula = count(*) from aula /*aqui vamos a guardar la cantidad de 
registros que existen en la tabla aulas que nos ayudará a determinar el nro sgte de aula*/
set @ultima_aula = @ultima_aula + 1
select @digitos_ultima_aula = len(@ultima_aula) /*aqui vamos a guardar la longitud 
del  valor del nuevo nro de aula que utilizamos en la sgte línea */
if @digitos_ultima_aula = 1
begin
select @cod_aula = cast(@turno as char(1))+cast(@ciclo as char(1))+'00'+cast(@ultima_aula as char(1))+@cod_esp
end
if @digitos_ultima_aula = 2
begin
select @cod_aula = cast(@turno as char(1))+cast(@ciclo as char(1))+'0'+cast(@ultima_aula as char(1))+@cod_esp
end
if @digitos_ultima_aula = 3
begin
select @cod_aula = cast(@turno as char(1))+cast(@ciclo as char(1))+cast(@ultima_aula as char(1))+@cod_esp
end
insert into aula (codaula, capacidad, fechini, turno, ciclo, codesp)
values (@cod_aula, @capacidad, @fechaini, @turno, @ciclo, @cod_esp)
END
--Exec dbo. Inserta_aulas 2, 30, '2010-08-01', 1, 'CI'
/*Donde los parámetros que le pasamos para insertar la nueva aula van en este orden
turno, capacidad, fecha_ini, ciclo, especialidad*/
Muchas gracias amigo
Pensé que nadie respondería y al final logre resolverlo
========================================================
insert into especialidad values('DG','DISEÑO GRAFICO')
insert into especialidad values('CI','COMPUTACION E INFORMATICA')
=========================
create proc in_aula(
@capacidad int ,
@fechini smalldatetime ,
@turno varchar(10),
@ciclo char(1),
@codesp char(7) ,
@m varchar(30) output
)
as
declare @cod char(7)
declare @cont int
BEGIN
if @turno='mañana'
set @turno ='1'
ELSE
if @turno='tarde'
set @turno ='2'
ELSE
if @turno='noche'
set @turno ='3'
END
BEGIN
set @cont=(select count(*)from aula where @codesp=codesp  )+1
  if(@cont<=100)
 BEGIN
if(@fechini>= GETDATE())  
BEGIN
IF(@cont<=10)
set @cod=@turno+@ciclo+'00'+convert(char(1),@cont)+@codesp
ELSE
if(@cont<=100)
set @cod=@turno +@ciclo+'0'+convert(char(2),@cont)+@codesp
ELSE
set @cod=@turno +@ciclo+convert(char(3),@cont)+@codesp
insert into  aula  values(@cod ,@capacidad  ,@fechini  ,
@turno ,@ciclo ,@codesp )
set @m ='aula registrada'
end
else
set @m ='la fecha debe ser mayor a la del sistema'
end
end
=================
declare @m varchar(30)
exec   in_aula 70,'07/01/2009','noche','6','ci',@m output
 select @m
Ahora tengo un ultimo problema con esta misma base de datos .Estos dos procedimientos son los que no me salían ahora solo falta este haber si me pueden seguir ayudando pliss...
Necesito crear un procedimiento almacenado para insertar una matricula donde se considere que :
*La fecha de matricula debe ser menor a la fecha de inicio del aula,
*La cantidad de alumnos matriculados por aula no supere a su capacidad(int),
 *y que se considere, que en cada aula debe haber el 50% de cada sexo.
Se que tengo que utilizar un inner join .pero lo estoy intentando aun no me sale... ojala con este procedimiento también me puedan ayudar .gracias ...
en lugar de un procedimiento podrías hacerlo con un trigger insert
create trigger TI_matricula ON matriculas FOR INSERT AS
BEGIN
declare @v_fecha_aula
declare @v_capacidad_aula
declare @ERRNO int
declare @ERRMSG   varchar(100)
select @v_fecha_aula = fechini from aula where codaula = (select codaula from inserted)
select @v_capacidad_aula= capacidad from aula where codaula = (select codaula from inserted)
if (select fechmat from inserted) >= @v_fecha_aula
begin
SELECT @ERRNO  = 30003,
             @ERRMSG = 'No se puede matricular porque ya empezaron las clases'
            GOTO ERROR
end
if (select count(*) from matriculas where codaula = (select codaula from inserted)) >@v_capacidad_aula
begin
SELECT @ERRNO  = 30003,
             @ERRMSG = 'No se puede matricular porque ya acabaron los cupos disponibles en el aula'
            GOTO ERROR
end
if (select count(*) from matriculas where codaula = (select codaula from inserted) and codalu in (select codalu from alumno where sexo = 'M' and codalu in(select codalu from matriculas where codaula = (select codaula from inserted))))  > (@v_capacidad_aula / 2)
begin
SELECT @ERRNO  = 30003,
             @ERRMSG = 'No se puede matricular porque el cupo de Hombres para el aula ya esta al limite'
            GOTO ERROR
end
if (select count(*) from matriculas where codaula = (select codaula from inserted) andcodalu in (select codalu from alumno where sexo = 'F' and codalu in(select codalu from matriculas where codaula = (select codaula from inserted))))  > (@v_capacidad_aula / 2)
begin
SELECT @ERRNO  = 30003,
             @ERRMSG = 'No se puede matricular porque el cupo de Mujeres para el aula ya esta al limite'
            GOTO ERROR
end
ERROR:
    RAISERROR @ERRNO @ERRMSG
    ROLLBACK  TRANSACTION
END
<span style="white-space: pre;"><span style="white-space: normal;">Espero te haya servido,</span></span>

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas