Stored Procedures - Transação e Exists
criar uma Stored Procedure (gerenciada por uma transação) para Alocar uma consulta com um certo médico em um certo horário, deverá ser verificado se não existe choque de horário.
Só que precisa ser gerenciada por uma transação, que eu nao sei. E ae no if precisa usar a clausula EXISTS ou NOT EXISTS, alguem ajuda ae?
CREATE PROCEDURE ALOCAR_CONSULTA @CrmMedico varchar(20), @CpfPaciente varchar(20), @DataConsulta date, @HorarioConsulta time(7), @ValorConsulta decimal(7,2) AS BEGIN if (@HorarioConsulta <> (select c.horarioConsulta from Consultas as C )) insert into Consultas (CrmMedico, CpfPaciente, DataConsulta, HorarioConsulta, ValorConsulta) values (@CrmMedico, @CpfPaciente, @DataConsulta, @HorarioConsulta, @valorConsulta) else print 'horario existente' END
Só que precisa ser gerenciada por uma transação, que eu nao sei. E ae no if precisa usar a clausula EXISTS ou NOT EXISTS, alguem ajuda ae?
Bgsouza
Curtidas 0
Respostas
Mariana Carvalho
21/06/2013
achei um tanto complexa.
GOSTEI 0
Joel Rodrigues
21/06/2013
Para começar, o IF seria mais ou menos assim:
IF NOT EXISTS (SELECT C.horarioConsulta FROM Consultas C WHERE C.horarioConsulta = @HorarioConsulta)
GOSTEI 0
Joel Rodrigues
21/06/2013
Sobre a transação, o esquema é o seguinte:
Então você poderia colocar o COMMIT e o ROLLBACK dentro de estruturas condicionais. Por exemplo:
BEGIN TRANSACTION --INSTRUÇÕES COMMMIT --OU ROLLBACK
Então você poderia colocar o COMMIT e o ROLLBACK dentro de estruturas condicionais. Por exemplo:
BEGIN TRANSACTION IF (alguma coisa) COMMIT ELSE ROLLBACK
GOSTEI 0
Joel Rodrigues
21/06/2013
No caso do seu procedure, seria mais ou menos assim:
BEGIN TRANSACTION COMMIT ROLLBACK CREATE PROCEDURE ALOCAR_CONSULTA @CrmMedico varchar(20), @CpfPaciente varchar(20), @DataConsulta date, @HorarioConsulta time(7), @ValorConsulta decimal(7,2) AS BEGIN BEGIN TRANSACTION IF NOT EXISTS (SELECT C.horarioConsulta FROM Consultas C WHERE C.horarioConsulta = @HorarioConsulta) BEGIN INSERT INTO Consultas (CrmMedico, CpfPaciente, DataConsulta, HorarioConsulta, ValorConsulta) VALUES (@CrmMedico, @CpfPaciente, @DataConsulta, @HorarioConsulta, @valorConsulta) COMMIT END ELSE BEGIN PRINT 'Horário existente' ROLLBACK END END
GOSTEI 0
Joel Rodrigues
21/06/2013
E aí, conseguiu?
GOSTEI 0