Array
(
)

Stored Procedures - Transação e Exists

Bgsouza
   - 21 jun 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.

#Código

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?

Joel Rodrigues
   - 30 jun 2013

Para começar, o IF seria mais ou menos assim:
#Código

IF NOT EXISTS (SELECT C.horarioConsulta FROM Consultas C WHERE C.horarioConsulta = @HorarioConsulta)

Joel Rodrigues
   - 30 jun 2013

Sobre a transação, o esquema é o seguinte:
#Código

BEGIN TRANSACTION

--INSTRUÇÕES

COMMMIT --OU ROLLBACK


Então você poderia colocar o COMMIT e o ROLLBACK dentro de estruturas condicionais. Por exemplo:
#Código
BEGIN TRANSACTION

IF (alguma coisa)
COMMIT
ELSE
ROLLBACK

Joel Rodrigues
   - 30 jun 2013

No caso do seu procedure, seria mais ou menos assim:
#Código

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

Joel Rodrigues
   - 09 jul 2013

E aí, conseguiu?