Stored Procedures - Transação e Exists

21/06/2013

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.


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

Respostas

30/06/2013

Joel Rodrigues Currículo

Para começar, o IF seria mais ou menos assim:
IF NOT EXISTS (SELECT C.horarioConsulta FROM Consultas C WHERE C.horarioConsulta = @HorarioConsulta)
Responder Citar

30/06/2013

Joel Rodrigues Currículo

Sobre a transação, o esquema é o seguinte:
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
Responder Citar

30/06/2013

Joel Rodrigues Currículo

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
Responder Citar

09/07/2013

Joel Rodrigues Currículo

E aí, conseguiu?
Responder Citar