O que acontece tenho um loop que quando o valor for igual a ZERO
Meus campo, auxiliares. Ficam desabilitados e esses campos ficam tudo zerado
POrem quando peço pra salvar da esse erro.
Sei que é por causa de um go_block, porem sou obrigada a deixar essa go_block.
Será que alguém ai pode me ajudar.
Declare
nr_rep Number;
REP NUMBER;
v_top_rec Number;
v_cur_rec Number;
v_cur_block Varchar2(100) := :System.current_block;
v_nro_rec Number;
Begin
-- fAZ DELETE NO CASO DE ALTERAR RESULTADO
If :parameter.acao = 'A' Then
Select Distinct pra.nr_repeticao
Into nr_rep
From pra pra,
resultado_exame re,
requisicao_exame r,
crm c,
resultados_gerais rg,
anticorpos_pra a,
pessoa_fisica pf,
pessoa_juridica pj,
lista_exame le
Where rg.nr_amostra = :parameter.numero_amostra
And rg.nr_amostra = re.nr_amostra
And le.nr_requisicao = r.nr_requisicao
And re.nr_amostra = le.nr_amostra
And re.nr_controle = le.nr_controle
And re.cd_servico = le.cd_servico
And re.nr_repeticao = le.nr_repeticao_atual
And rg.cd_servico = re.cd_servico
And rg.nr_controle = re.nr_controle
And rg.nr_repeticao = re.nr_repeticao
And re.nr_amostra = pra.nr_amostra
And re.cd_servico = pra.cd_servico
And re.nr_controle = pra.nr_controle
And re.nr_repeticao = pra.nr_repeticao
And pra.cd_anticorpo = a.cd_anticorpo
And c.cd_crm(+) = r.cd_crm
And pf.cd_pessoafisica = re.cd_pessoafisica
And pj.id_pessoajuridica = r.cd_pessoajuridica
And pra.cd_usuario = rg.cd_usuario;
If :cd_anticorpo1 Is Not Null And :vl_anticorpo1 Is Not Null
And :cd_anticorpo2 Is Not Null And :vl_anticorpo2 Is Not Null Then
If :nr_repeticao = nr_rep Then
Delete From pra
Where nr_amostra = :nr_amostra
And nr_repeticao = :nr_repeticao;
End If;
End If;
End If;
-- FINALIZA ALTERAÇÃO
--ENTRA NO BLOCO ANTICORPO1
If :cd_anticorpo1 Is Not Null and :vl_anticorpo1 is not null Then
go_block('anticorpo1');
v_top_rec := get_block_property('anticorpo1', top_record);
v_cur_rec := get_block_property('anticorpo1', current_record);
first_record;
If :cd_anticorpo1 Is Not Null and :vl_anticorpo1 is Not Null Then
--Faz pesquisa no banco para verificar se já possui alterações. Se possuir, deletar e salvar no loop
Select count(1) Into v_nro_rec
From pra p
Where p.nr_amostra = :resultados_gerais.nr_amostra
And p.nr_controle = :resultados_gerais.nr_controle
And p.nr_repeticao = :resultados_gerais.nr_repeticao
And p.cd_servico = :resultados_gerais.cd_servico
And p.cd_anticorpo = :cd_anticorpo1;
if v_nro_rec > 0 then
Delete From pra
Where nr_amostra = :nr_amostra
And nr_repeticao = :nr_repeticao;
end if;
--Inicia o Loop, para inserir dados anticorpo1
Loop
If :system.record_status In ('NEW', 'INSERT') Then
If :cd_anticorpo1 Is Not Null And :vl_anticorpo1 Is Not Null Then
Begin
--Faz insert no bloco pra
Insert Into pra
(nr_amostra,
nr_controle,
nr_repeticao,
cd_servico,
cd_anticorpo,
dt_realizacao,
dt_atualizacao,
cd_usuario,
vl_anticorpo)
Values
(:resultados_gerais.nr_amostra,
:resultados_gerais.nr_controle,
:resultados_gerais.nr_repeticao,
:resultados_gerais.cd_servico,
:cd_anticorpo1,
:resultados_gerais.dt_realizacao,
:resultados_gerais.dt_atualizacao,
:global.cd_pessoafisica,
:vl_anticorpo1);
Exception
When Others Then
controle_de_msg('ERR', Sqlerrm);
End;
End If;
forms_ddl('commit');
End If;
Exit When :system.last_record = 'TRUE';
next_record;
End Loop;
end if;
End If;
go_record(v_top_rec);
go_record(v_cur_rec);
--FINALIZA ANTICORPO1
--end if;
If :cd_anticorpo2 Is Not Null and :vl_anticorpo2 is not null Then
--INICIAR BLOCO ANTICORPO2
go_block('anticorpo2');
v_top_rec := get_block_property('anticorpo2', top_record);
v_cur_rec := get_block_property('anticorpo2', current_record);
first_record;
--Loop para salvar campos cd_anticorpo2 e vl_anticorpo2 no bloco PRA
If :cd_anticorpo2 Is Not Null and :vl_anticorpo2 is not null Then
Loop
If :system.record_status In ('NEW', 'INSERT') Then
If :cd_anticorpo2 Is Not Null And :vl_anticorpo2 Is Not Null Then
Select count(1) Into v_nro_rec
From pra p
Where p.nr_amostra = :resultados_gerais.nr_amostra
And p.nr_controle = :resultados_gerais.nr_controle
And p.nr_repeticao = :resultados_gerais.nr_repeticao
And p.cd_servico = :resultados_gerais.cd_servico
And p.cd_anticorpo = :cd_anticorpo2;
Begin
Insert Into pra
(nr_amostra,
nr_controle,
nr_repeticao,
cd_servico,
cd_anticorpo,
dt_realizacao,
dt_atualizacao,
cd_usuario,
vl_anticorpo)
Values
(:resultados_gerais.nr_amostra,
:resultados_gerais.nr_controle,
:resultados_gerais.nr_repeticao,
:resultados_gerais.cd_servico,
:cd_anticorpo2,
:resultados_gerais.dt_realizacao,
:resultados_gerais.dt_atualizacao,
:global.cd_pessoafisica,
:vl_anticorpo2);
Exception
When Others Then
controle_de_msg('ERR', Sqlerrm);
End;
end if;
-- v_nro_rec := 0;
forms_ddl('commit');
End If;
Exit When :system.last_record = 'TRUE';
next_record;
End Loop;
End If;
go_record(v_top_rec);
go_record(v_cur_rec);
go_block(v_cur_block);
end if;
If :parameter.acao = 'I' Then
validar_obrigatorios;
commit_form;
habilitar_botoes;
else
:system.message_level := 25;
Commit;
:system.message_level := 0;
message('Operação Realizada com sucesso!');
end if;
End;