O que tem de errado nessa Procedure?
04/04/2007
0
CREATE PROCEDURE sp_Aso_Exame_CARGO(@in_pFK_ASO INT,
@in_pFK_CARGO INT,
@in_pFK_CLIENTE INT,
@in_pFK_EXAME_REALIZADO INT,
@in_pFK_FUNCIONARIO INT,
@in_pFK_SETOR INT,
@in_pASOE_DATA_REALIZACAO DATETIME)
AS
DECLARE @vFK_EXAMES int
DECLARE @vFK_RISCOS int
DECLARE @vEEC_PERIODICIDADE int
DECLARE CUR_ASO_EXAMES CURSOR FOR
SELECT TAB_ASO_EXAMES.FK_EXAMES
FROM TAB_ASO_EXAMES
WHERE (TAB_ASO_EXAMES.FK_CARGO = @in_pFK_CARGO)
AND (TAB_ASO_EXAMES.FK_SETOR = @in_pFK_SETOR)
AND (TAB_ASO_EXAMES.FK_CLIENTE = @in_pFK_CLIENTE)
BEGIN
/* Procedure body */
OPEN CUR_ASO_EXAMES
FETCH NEXT FROM CUR_ASO_EXAMES INTO
@vFK_EXAMES
while @@FETCH_STATUS = 0
begin
insert into TAB_ASO_EXAMES (TAB_ASO_EXAMES.FK_ASO,
TAB_ASO_EXAMES.FK_CARGO,
TAB_ASO_EXAMES.FK_CLIENTE,
TAB_ASO_EXAMES.FK_EXAMES,
TAB_ASO_EXAMES.FK_EXAME_REALIZADO,
TAB_ASO_EXAMES.FK_FUNCIONARIO,
TAB_ASO_EXAMES.FK_SETOR,
TAB_ASO_EXAMES.ASOE_DATA_REALIZACAO)
values
(@in_pFK_ASO,
@in_pFK_CARGO,
@in_pFK_CLIENTE,
@vFK_EXAMES,
@in_pFK_EXAME_REALIZADO,
@in_pFK_FUNCIONARIO,
@in_pFK_SETOR,
@in_pASOE_DATA_REALIZACAO)
end
close CUR_ASO_EXAMES
deallocate CUR_ASO_EXAMES
END
Luciano Andrade
Curtir tópico
+ 0Posts
05/04/2007
Psergio.p
Assim fica em loop mesmo!
Insere um FETCH NEXT após você incluir o registro!
Entendeu?
Gostei + 0
11/04/2007
Luciano Andrade
Ham agora deu certo porem, ao executar ele da um erro de duplicação de chave, voce sabe se existe uma possibilidade do FEXT NEXT nao estar passando para o proximo registro?
Gostei + 0
12/04/2007
Macario
Vejo aqui lhe ajudar pois vejo que você não compreendeu o funcionamento do FETCH NEXT completamente.
Sempre que se efetua um FETCH NEXT por razão há necessidade de atribuir o valor obtido a uma variavel no seu caso [b:7441c9d4eb]@vFK_EXAMES[/b:7441c9d4eb]
Então após a instrução de insert inclua novamente
FETCH NEXT FROM CUR_ASO_EXAMES INTO
@vFK_EXAMES
Espero que lhe ajude.
[]´s.
P.s.: Evite duplicar topicos.
Gostei + 0
12/04/2007
Luciano Andrade
Gostei + 0
12/04/2007
Luciano Andrade
Gostei + 0
12/04/2007
Luciano Andrade
o caso do loop foi resolvido com esse toque que voces me deram, porem ao executar essa procedure ela so insere um registro segue abaixo a procedure original.
CREATE PROCEDURE dbo.SP_INSERE_RISCO_CARGO (@in_pFK_ASO INT,
@in_pFK_CARGO INT,
@in_pFK_CLIENTE INT,
@in_pFK_EXAME_REALIZADO INT,
@in_pFK_FUNCIONARIO INT,
@in_pFK_SETOR INT)
AS
DECLARE @vFK_RISCOS int
DECLARE CUR_ASO_RISCO CURSOR FOR
SELECT distinct(TAB_ASO_RISCO.FK_RISCOS)
FROM TAB_ASO_RISCO
WHERE (TAB_ASO_RISCO.FK_CARGO = @in_pFK_CARGO)
AND (TAB_ASO_RISCO.FK_CLIENTE = @in_pFK_CLIENTE)
AND (TAB_ASO_RISCO.FK_SETOR = @in_pFK_SETOR)
BEGIN
/* Procedure body */
OPEN CUR_ASO_RISCO
FETCH NEXT FROM CUR_ASO_RISCO INTO
@vFK_RISCOS
while @@FETCH_STATUS = 0
begin
insert into TAB_ASO_RISCO (TAB_ASO_RISCO.FK_ASO,
TAB_ASO_RISCO.FK_CARGO,
TAB_ASO_RISCO.FK_CLIENTE,
TAB_ASO_RISCO.FK_EXAME_REALIZADO,
TAB_ASO_RISCO.FK_FUNCIONARIO,
TAB_ASO_RISCO.FK_SETOR,
TAB_ASO_RISCO.FK_RISCOS)
values
(@in_pFK_ASO ,
@in_pFK_CARGO ,
@in_pFK_CLIENTE,
@in_pFK_EXAME_REALIZADO,
@in_pFK_FUNCIONARIO,
@in_pFK_SETOR,
@vFK_RISCOS)
FETCH NEXT FROM CUR_ASO_RISCO
end/*@@FETCH_STATUS = 0 CUR_ASO_RISCO*/
close CUR_ASO_RISCO
deallocate CUR_ASO_RISCO
END
Gostei + 0
12/04/2007
Macario
CREATE PROCEDURE dbo.SP_INSERE_RISCO_CARGO (@in_pFK_ASO INT,
@in_pFK_CARGO INT,
@in_pFK_CLIENTE INT,
@in_pFK_EXAME_REALIZADO INT,
@in_pFK_FUNCIONARIO INT,
@in_pFK_SETOR INT)
AS
DECLARE @vFK_RISCOS int
DECLARE CUR_ASO_RISCO CURSOR FOR
SELECT distinct(TAB_ASO_RISCO.FK_RISCOS)
FROM TAB_ASO_RISCO
WHERE (TAB_ASO_RISCO.FK_CARGO = @in_pFK_CARGO)
AND (TAB_ASO_RISCO.FK_CLIENTE = @in_pFK_CLIENTE)
AND (TAB_ASO_RISCO.FK_SETOR = @in_pFK_SETOR)
BEGIN
/* Procedure body */
OPEN CUR_ASO_RISCO
FETCH NEXT FROM CUR_ASO_RISCO INTO
@vFK_RISCOS
while @@FETCH_STATUS = 0
begin
insert into TAB_ASO_RISCO (TAB_ASO_RISCO.FK_ASO,
TAB_ASO_RISCO.FK_CARGO,
TAB_ASO_RISCO.FK_CLIENTE,
TAB_ASO_RISCO.FK_EXAME_REALIZADO,
TAB_ASO_RISCO.FK_FUNCIONARIO,
TAB_ASO_RISCO.FK_SETOR,
TAB_ASO_RISCO.FK_RISCOS)
values
(@in_pFK_ASO ,
@in_pFK_CARGO ,
@in_pFK_CLIENTE,
@in_pFK_EXAME_REALIZADO,
@in_pFK_FUNCIONARIO,
@in_pFK_SETOR,
@vFK_RISCOS)
[b:d0e1eca67f]FETCH NEXT FROM CUR_ASO_RISCO INTO
@vFK_RISCOS [/b:d0e1eca67f]
end
close CUR_ASO_RISCO
deallocate CUR_ASO_RISCO
END
A indicação em negrito aponta onde você precisa alterar a procedure, compreende. :roll:
Gostei + 0
13/04/2007
Luciano Andrade
Gostei + 0
13/04/2007
Rjun
FETCH NEXT FROM CUR_ASO_RISCO
O Macario disse para você deixa-lo assim:
FETCH NEXT FROM CUR_ASO_EXAMES INTO @vFK_EXAMES
Você precisa dizer ao FETCH que ele deve atribuir os valores para suas variáveis.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)