Possuo um esquema de relação FUNCIONARIO(CPF, PNOME, SNOME, DEPARTAMENTO, CPF_GERENTE, SALARIO)
Esse meu esquema foi populado. Os CPFs com valores '00000000000', '11111111111'...'444444444444' são os CPFs dos gerentes. Nesses registros, CPF_GERENTE fica vazio. Os registros que possuem essas características não podem ser atualizados.
Tenho, obviamente, um módulo. Este se chama EMPRESA. Nesse módulo, se encontra o meu bloco FUNCIONARIO. Nesse bloco, eu tenho os itens que correspondem aos atributos da tabela (descritos no esquema de relação acima).
Criei uma trigger PRE-UPDATE no bloco FUNCIONARIO:
declare
alerta number;
if :funcionario.cpf = '00000000000' or
:funcionario.cpf = '11111111111' or
:funcionario.cpf = '22222222222' or
:funcionario.cpf = '33333333333' or
:funcionario.cpf = '44444444444'
then
number := show_alert('alerta_não_pode_atualizar');
raise form_trigger_failure;
end if;
Descrição do problema: eu seleciono no menu do forms "executar consulta" e clico em "próximo registro". Os registros vão aparecendo (estão todos no canvas). Modifico algum atributo de algum registro que não tenha CPF de um gerente e a atualização ocorre perfeitamente. Clico em "próximo registro" até começar a aparecer os registros dos gerentes. Escolho um aleatoriamente, o que tem CPF = '33333333333' e modifico o seu salário, por exemplo. O alerta é mostrado adequadamente o o raise form_trigger_failure impede a modificação. CONTUDO, OS VALORES QUE ESTAVAM SENDO MOSTRADOS NA TELA SÃO MODIFICADOS SEMPRE PARA O PRIMEIRO REGISTRO GERENTE (que tem cpf = 00000000000, pnom = ..., snome = ...). Não importa qual dos registros de gerente eu escolha: sempre que tento atualizar, a mensagem aparece (é o desejado), a atualização é impedida (também desejado) e os valores mostrados em tela voltam ao valor do primeiro registro que pertence ao primeiro gerente cadastrado no banco de dados (não desejado).
Não estou entendendo isso. (1)Por que isso ocorre? (2) Tentei usar o go_record, utilizando ":SYSTEM.CURSOR_RECORD;" ou "Get_Block_Property( 'FUNCIONARIO', CURRENT_RECORD);" e não funcionou. A trigger compilou sem erros, mas no navegador dá o erro "procedimento restrito GO_RECORD na trigger PRE-UPDATE".
Por favor, me ajudem!