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ódigoCREATE 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ódigoIF 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ódigoBEGIN 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?