alter table entidade
  add ent_natureza varchar(10),
  add ent_retemiss boolean;
  
alter table parametros add par_integrarproteus boolean, add par_ipprotheus varchar(100);

insert into atualizacoes(atu_nome) values ('v17070001_180917.sql');

create table examessyslab (
       fil_codigo           integer not null,
       lae_codigo           integer not null,
       sys_codexame         varchar(8) not null,
       sys_descricaoexame   varchar(100),
       sys_codmaterial      varchar(5),
       sys_xml              text
);

create unique index xpkexamessyslab on examessyslab
(
       fil_codigo,
       lae_codigo,
       sys_codexame
);

create index xif1examessyslab on examessyslab
(
       fil_codigo,
       lae_codigo
);


alter table examessyslab
       add primary key (fil_codigo, lae_codigo, sys_codexame);


create function fn_ti_examessyslab() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from labexterno
      where
        new.fil_codigo = labexterno.fil_codigo and
        new.lae_codigo = labexterno.lae_codigo;
    tmp:=''labexterno|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''lae_codigo='' || new.lae_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela labexterno. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;


return new;
end;'
language 'plpgsql';
					
create trigger ti_examessyslab
after insert on examessyslab
for each row execute procedure fn_ti_examessyslab();


create function fn_tu_examessyslab() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  select count(*) into numrows
    from labexterno
    where
      new.fil_codigo = labexterno.fil_codigo and
      new.lae_codigo = labexterno.lae_codigo;
    tmp:=''labexterno|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''lae_codigo='' || new.lae_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela labexterno. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;


return old;
end;'
language 'plpgsql';
					
create trigger tu_examessyslab
after update on examessyslab
for each row execute procedure fn_tu_examessyslab();


drop function fn_td_labexterno() cascade;

create function fn_td_labexterno() returns opaque as '
declare
	numrows integer;										 
begin
    delete from examessyslab
      where
        examessyslab.fil_codigo = old.fil_codigo and
        examessyslab.lae_codigo = old.lae_codigo;

    delete from examesunilab
      where
        examesunilab.fil_codigo = old.fil_codigo and
        examesunilab.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from filiais_postocoleta
      where
        filiais_postocoleta.fil_codigo = old.fil_codigo and
        filiais_postocoleta.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela filiais_postocoleta.'';
    end if;

    delete from logimportacaolabexterno
      where
        logimportacaolabexterno.fil_codigo = old.fil_codigo and
        logimportacaolabexterno.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from examessolucao
      where
        examessolucao.fil_codigo = old.fil_codigo and
        examessolucao.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examessolucao.'';
    end if;

    select count(*) into numrows
      from examesdb
      where
        examesdb.fil_codigo = old.fil_codigo and
        examesdb.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examesdb.'';
    end if;

    delete from examesatitude
      where
        examesatitude.fil_codigo = old.fil_codigo and
        examesatitude.lae_codigo = old.lae_codigo;

    delete from examesbalague
      where
        examesbalague.fil_codigo = old.fil_codigo and
        examesbalague.lae_codigo = old.lae_codigo;

    delete from examesdelta
      where
        examesdelta.fil_codigo = old.fil_codigo and
        examesdelta.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from examematcoletalabexterno
      where
        examematcoletalabexterno.fil_codigo = old.fil_codigo and
        examematcoletalabexterno.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examematcoletalabexterno.'';
    end if;

    select count(*) into numrows
      from examesmatrix
      where
        examesmatrix.fil_codigo = old.fil_codigo and
        examesmatrix.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examesmatrix.'';
    end if;

    select count(*) into numrows
      from examesrede
      where
        examesrede.fil_codigo = old.fil_codigo and
        examesrede.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examesrede.'';
    end if;

    delete from examesreacao
      where
        examesreacao.fil_codigo = old.fil_codigo and
        examesreacao.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from pacientelabexterno
      where
        pacientelabexterno.fil_codigo = old.fil_codigo and
        pacientelabexterno.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela pacientelabexterno.'';
    end if;

    select count(*) into numrows
      from requisicaolabexterno
      where
        requisicaolabexterno.fil_codigo = old.fil_codigo and
        requisicaolabexterno.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaolabexterno.'';
    end if;

    delete from examessergiofranco
      where
        examessergiofranco.fil_codigo = old.fil_codigo and
        examessergiofranco.lae_codigo = old.lae_codigo;

    delete from examesalvaro
      where
        examesalvaro.fil_codigo = old.fil_codigo and
        examesalvaro.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from examesjalis
      where
        examesjalis.fil_codigo = old.fil_codigo and
        examesjalis.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examesjalis.'';
    end if;

    delete from examespardini
      where
        examespardini.fil_codigo = old.fil_codigo and
        examespardini.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from loteexterno
      where
        loteexterno.fil_codigo = old.fil_codigo and
        loteexterno.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela loteexterno.'';
    end if;


return old;
end;'
language 'plpgsql';
					
create trigger td_labexterno
after delete on labexterno
for each row execute procedure fn_td_labexterno();


drop function fn_ti_labexterno() cascade;

create function fn_ti_labexterno() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from prazoentrega
      where
        new.fil_codigo = prazoentrega.fil_codigo and
        new.prz_codigo = prazoentrega.prz_codigo;
    tmp:=''prazoentrega|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''prz_codigo='' || new.prz_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.prz_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela prazoentrega. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from metodologia
      where
        new.fil_codigo = metodologia.fil_codigo and
        new.met_codigo = metodologia.met_codigo;
    tmp:=''metodologia|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''met_codigo='' || new.met_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.met_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela metodologia. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from setores
      where
        new.fil_codigo = setores.fil_codigo and
        new.set_codigo = setores.set_codigo;
    tmp:=''setores|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''set_codigo='' || new.set_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.set_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela setores. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from usuario
      where
        new.usr_codconferir = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codconferir || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codconferir is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from filiais_postocoleta
      where
        new.fil_codigo = filiais_postocoleta.fil_codigo;
    tmp:=''filiais_postocoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela filiais_postocoleta. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;


return new;
end;'
language 'plpgsql';
					
create trigger ti_labexterno
after insert on labexterno
for each row execute procedure fn_ti_labexterno();


drop function fn_tu_labexterno() cascade;

create function fn_tu_labexterno() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examessyslab
      where
        examessyslab.fil_codigo = old.fil_codigo and
        examessyslab.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examessyslab.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesunilab
      where
        examesunilab.fil_codigo = old.fil_codigo and
        examesunilab.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesunilab.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from filiais_postocoleta
      where
        filiais_postocoleta.fil_codigo = old.fil_codigo and
        filiais_postocoleta.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela filiais_postocoleta.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from logimportacaolabexterno
      where
        logimportacaolabexterno.fil_codigo = old.fil_codigo and
        logimportacaolabexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela logimportacaolabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examessolucao
      where
        examessolucao.fil_codigo = old.fil_codigo and
        examessolucao.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examessolucao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesdb
      where
        examesdb.fil_codigo = old.fil_codigo and
        examesdb.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesdb.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesatitude
      where
        examesatitude.fil_codigo = old.fil_codigo and
        examesatitude.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesatitude.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesbalague
      where
        examesbalague.fil_codigo = old.fil_codigo and
        examesbalague.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesbalague.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesdelta
      where
        examesdelta.fil_codigo = old.fil_codigo and
        examesdelta.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesdelta.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examematcoletalabexterno
      where
        examematcoletalabexterno.fil_codigo = old.fil_codigo and
        examematcoletalabexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematcoletalabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesmatrix
      where
        examesmatrix.fil_codigo = old.fil_codigo and
        examesmatrix.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesmatrix.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesrede
      where
        examesrede.fil_codigo = old.fil_codigo and
        examesrede.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesrede.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesreacao
      where
        examesreacao.fil_codigo = old.fil_codigo and
        examesreacao.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesreacao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from pacientelabexterno
      where
        pacientelabexterno.fil_codigo = old.fil_codigo and
        pacientelabexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela pacientelabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from requisicaolabexterno
      where
        requisicaolabexterno.fil_codigo = old.fil_codigo and
        requisicaolabexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaolabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examessergiofranco
      where
        examessergiofranco.fil_codigo = old.fil_codigo and
        examessergiofranco.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examessergiofranco.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesalvaro
      where
        examesalvaro.fil_codigo = old.fil_codigo and
        examesalvaro.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesalvaro.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesjalis
      where
        examesjalis.fil_codigo = old.fil_codigo and
        examesjalis.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesjalis.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examespardini
      where
        examespardini.fil_codigo = old.fil_codigo and
        examespardini.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examespardini.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from loteexterno
      where
        loteexterno.fil_codigo = old.fil_codigo and
        loteexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela loteexterno.'';
    end if;
  end if;
  select count(*) into numrows
    from prazoentrega
    where
      new.fil_codigo = prazoentrega.fil_codigo and
      new.prz_codigo = prazoentrega.prz_codigo;
    tmp:=''prazoentrega|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''prz_codigo='' || new.prz_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.prz_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela prazoentrega. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from metodologia
    where
      new.fil_codigo = metodologia.fil_codigo and
      new.met_codigo = metodologia.met_codigo;
    tmp:=''metodologia|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''met_codigo='' || new.met_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.met_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela metodologia. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from setores
    where
      new.fil_codigo = setores.fil_codigo and
      new.set_codigo = setores.set_codigo;
    tmp:=''setores|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''set_codigo='' || new.set_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.set_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela setores. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from usuario
    where
      new.usr_codconferir = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codconferir || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codconferir is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from filiais_postocoleta
    where
      new.fil_codigo = filiais_postocoleta.fil_codigo;
    tmp:=''filiais_postocoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela filiais_postocoleta. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;


return old;
end;'
language 'plpgsql';
					
create trigger tu_labexterno
after update on labexterno
for each row execute procedure fn_tu_labexterno();




insert into atualizacoes(atu_nome) values ('v17070002_200917.sql');

alter table layout add lay_tipoetiquetalaudo varchar(1), add lay_etiquetalaudo text;

alter table paciente add pac_incapacitado boolean, add pac_responsavel varchar(100), add pac_cpfresponsavel varchar(14);
alter table requisicao add req_incapacitado boolean, add req_responsavel varchar(100), add req_cpfresponsavel varchar(14);
alter table parametros add par_exigirresponsavelincapaz boolean;

insert into atualizacoes(atu_nome) values ('v17070003_220917.sql');


create table requisicaovisualizada (
       rvi_codigo           serial not null,
       fil_codigo           integer,
       req_codigo           integer,
       rvi_datahora         timestamp,
       rvi_tipoacesso       varchar(1)
);

create unique index xpkrequisicaovisualizada on requisicaovisualizada
(
       rvi_codigo
);

create index xif1requisicaovisualizada on requisicaovisualizada
(
       fil_codigo,
       req_codigo
);

create index xie1requisicaovisualizada on requisicaovisualizada
(
       fil_codigo,
       req_codigo,
       rvi_tipoacesso
);


alter table requisicaovisualizada
       add primary key (rvi_codigo);




drop function fn_td_requisicao() cascade;

create function fn_td_requisicao() returns opaque as '
declare
	numrows integer;										 
begin
    delete from requisicaovisualizada
      where
        requisicaovisualizada.fil_codigo = old.fil_codigo and
        requisicaovisualizada.req_codigo = old.req_codigo;

    delete from exportaintegracaooperadora
      where
        exportaintegracaooperadora.fil_codigo = old.fil_codigo and
        exportaintegracaooperadora.req_codigo = old.req_codigo;

    delete from requisicaoimagens
      where
        requisicaoimagens.fil_codigo = old.fil_codigo and
        requisicaoimagens.req_codigo = old.req_codigo;

    delete from logsms
      where
        logsms.fil_codigo = old.fil_codigo and
        logsms.req_codigo = old.req_codigo;

    select count(*) into numrows
      from requisicaotaxa
      where
        requisicaotaxa.fil_codigo = old.fil_codigo and
        requisicaotaxa.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaotaxa.'';
    end if;

    select count(*) into numrows
      from lotefilialrequisicao
      where
        lotefilialrequisicao.fil_codigo = old.fil_codigo and
        lotefilialrequisicao.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela lotefilialrequisicao.'';
    end if;

    select count(*) into numrows
      from requisicaonaoconformidade
      where
        requisicaonaoconformidade.fil_codigo = old.fil_codigo and
        requisicaonaoconformidade.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaonaoconformidade.'';
    end if;

    select count(*) into numrows
      from requisicaolog
      where
        requisicaolog.fil_codigo = old.fil_codigo and
        requisicaolog.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaolog.'';
    end if;

    select count(*) into numrows
      from agendamento
      where
        agendamento.fil_codigo = old.fil_codigo and
        agendamento.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela agendamento.'';
    end if;

    select count(*) into numrows
      from requisicaoweb
      where
        requisicaoweb.fil_codigo = old.fil_codigo and
        requisicaoweb.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaoweb.'';
    end if;

    select count(*) into numrows
      from requisicaonotafiscal
      where
        requisicaonotafiscal.fil_codigo = old.fil_codigo and
        requisicaonotafiscal.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaonotafiscal.'';
    end if;

    select count(*) into numrows
      from requisicaolabexterno
      where
        requisicaolabexterno.fil_codigo = old.fil_codigo and
        requisicaolabexterno.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaolabexterno.'';
    end if;

    delete from requisicaocid10
      where
        requisicaocid10.fil_codigo = old.fil_codigo and
        requisicaocid10.req_codigo = old.req_codigo;

    select count(*) into numrows
      from loteexternorequisicao
      where
        loteexternorequisicao.fil_kodigo = old.fil_codigo and
        loteexternorequisicao.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela loteexternorequisicao.'';
    end if;

    select count(*) into numrows
      from loteapoiorequisicao
      where
        loteapoiorequisicao.fil_codigo = old.fil_codigo and
        loteapoiorequisicao.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela loteapoiorequisicao.'';
    end if;

    delete from requisicaousuario
      where
        requisicaousuario.fil_codigo = old.fil_codigo and
        requisicaousuario.req_codigo = old.req_codigo;

    delete from requisicaolanctocaixa
      where
        requisicaolanctocaixa.fil_codigo = old.fil_codigo and
        requisicaolanctocaixa.req_codigo = old.req_codigo;

    delete from examescontrole
      where
        examescontrole.fil_codigo = old.fil_codigo and
        examescontrole.req_codigo = old.req_codigo;

    select count(*) into numrows
      from requisicaorequisicao
      where
        requisicaorequisicao.fil_codigo = old.fil_codigo and
        requisicaorequisicao.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaorequisicao.'';
    end if;

    delete from requisicaomedicamento
      where
        requisicaomedicamento.fil_codigo = old.fil_codigo and
        requisicaomedicamento.req_codigo = old.req_codigo;

    select count(*) into numrows
      from faturarequisicao
      where
        faturarequisicao.fil_kodigo = old.fil_codigo and
        faturarequisicao.req_codigo = old.req_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela faturarequisicao.'';
    end if;

    delete from requisicaorequisicao
      where
        requisicaorequisicao.fil_codigo = old.fil_codigo and
        requisicaorequisicao.req_kodigo = old.req_codigo;

    delete from examerequisicao
      where
        examerequisicao.fil_codigo = old.fil_codigo and
        examerequisicao.req_codigo = old.req_codigo;


return old;
end;'
language 'plpgsql';
					
create trigger td_requisicao
after delete on requisicao
for each row execute procedure fn_td_requisicao();


drop function fn_ti_requisicao() cascade;

create function fn_ti_requisicao() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from produtoalimentos
      where
        new.fil_codigo = produtoalimentos.fil_codigo and
        new.cpl_codigo = produtoalimentos.cpl_codigo and
        new.pal_codigo = produtoalimentos.pal_codigo;
    tmp:=''produtoalimentos|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''cpl_codigo='' || new.cpl_codigo || ''|'';
    
      tmp:=tmp || ''pal_codigo='' || new.pal_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.cpl_codigo is not null and
      new.pal_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela produtoalimentos. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from usuario
      where
        new.usr_coddesconto = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_coddesconto || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_coddesconto is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from usuario
      where
        new.usr_codelegibilidade = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codelegibilidade || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codelegibilidade is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from formapagto
      where
        new.fpg_codigo = formapagto.fpg_codigo and
        new.fil_codigo = formapagto.fil_codigo;
    tmp:=''formapagto|'';
    
      tmp:=tmp || ''fpg_codigo='' || new.fpg_codigo || ''|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fpg_codigo is not null and
      new.fil_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela formapagto. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from pais
      where
        new.fil_codigo = pais.fil_codigo and
        new.pai_codigo = pais.pai_codigo;
    tmp:=''pais|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''pai_codigo='' || new.pai_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.pai_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela pais. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from usuario
      where
        new.usr_codguiarepasse = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codguiarepasse || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codguiarepasse is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from convenios
      where
        new.fil_codigo = convenios.fil_codigo and
        new.con_codrepasse = convenios.con_codigo;
    tmp:=''convenios|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''con_codigo='' || new.con_codrepasse || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.con_codrepasse is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela convenios. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from orcamento
      where
        new.fil_codigo = orcamento.fil_codigo and
        new.orc_codigo = orcamento.orc_codigo;
    tmp:=''orcamento|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''orc_codigo='' || new.orc_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.orc_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela orcamento. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from unidadesaude
      where
        new.fil_codigo = unidadesaude.fil_codigo and
        new.uns_codigo = unidadesaude.uns_codigo;
    tmp:=''unidadesaude|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''uns_codigo='' || new.uns_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.uns_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela unidadesaude. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from usuario
      where
        new.usr_codexcluida = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codexcluida || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codexcluida is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from entidade
      where
        new.fil_codigo = entidade.fil_codigo and
        new.ent_codigo = entidade.ent_codigo;
    tmp:=''entidade|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''ent_codigo='' || new.ent_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.ent_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela entidade. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from embalagemproduto
      where
        new.fil_codigo = embalagemproduto.fil_codigo and
        new.emb_codigo = embalagemproduto.emb_codigo;
    tmp:=''embalagemproduto|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''emb_codigo='' || new.emb_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.emb_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela embalagemproduto. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from unidademedida
      where
        new.fil_codigo = unidademedida.fil_codigo and
        new.unm_codigo = unidademedida.unm_codigo;
    tmp:=''unidademedida|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''unm_codigo='' || new.unm_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.unm_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela unidademedida. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from situacao
      where
        new.fil_codigo = situacao.fil_codigo and
        new.sit_codigo = situacao.sit_codigo;
    tmp:=''situacao|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''sit_codigo='' || new.sit_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.sit_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela situacao. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from alahospital
      where
        new.fil_codigo = alahospital.fil_codigo and
        new.ala_codigo = alahospital.ala_codigo;
    tmp:=''alahospital|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''ala_codigo='' || new.ala_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.ala_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela alahospital. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from filiais_postocoleta
      where
        new.fil_codcopia = filiais_postocoleta.fil_codigo;
    tmp:=''filiais_postocoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codcopia || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codcopia is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela filiais_postocoleta. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from usuario
      where
        new.usr_codabertura = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codabertura || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codabertura is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from estacoes
      where
        new.est_codigo = estacoes.est_codigo;
    tmp:=''estacoes|'';
    
      tmp:=tmp || ''est_codigo='' || new.est_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.est_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela estacoes. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from usuario
      where
        new.usr_codigo = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from filiais_postocoleta
      where
        new.fil_codigo = filiais_postocoleta.fil_codigo;
    tmp:=''filiais_postocoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela filiais_postocoleta. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from coletas
      where
        new.fil_codigo = coletas.fil_codigo and
        new.col_codigo = coletas.col_codigo;
    tmp:=''coletas|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''col_codigo='' || new.col_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.col_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela coletas. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from destino
      where
        new.fil_codigo = destino.fil_codigo and
        new.des_codigo = destino.des_codigo;
    tmp:=''destino|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''des_codigo='' || new.des_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.des_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela destino. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from convenios
      where
        new.fil_codigo = convenios.fil_codigo and
        new.con_codigo = convenios.con_codigo;
    tmp:=''convenios|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''con_codigo='' || new.con_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.con_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela convenios. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from medico
      where
        new.fil_codigo = medico.fil_codigo and
        new.med_conselho = medico.med_conselho and
        new.med_crm = medico.med_crm and
        new.med_uf = medico.med_uf;
    tmp:=''medico|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''med_conselho='' || new.med_conselho || ''|'';
    
      tmp:=tmp || ''med_crm='' || new.med_crm || ''|'';
    
      tmp:=tmp || ''med_uf='' || new.med_uf || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.med_conselho is not null and
      new.med_crm is not null and
      new.med_uf is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela medico. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from paciente
      where
        new.fil_codigo = paciente.fil_codigo and
        new.pac_codigo = paciente.pac_codigo;
    tmp:=''paciente|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''pac_codigo='' || new.pac_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela paciente. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;


return new;
end;'
language 'plpgsql';
					
create trigger ti_requisicao
after insert on requisicao
for each row execute procedure fn_ti_requisicao();


drop function fn_tu_requisicao() cascade;

create function fn_tu_requisicao() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaovisualizada
      where
        requisicaovisualizada.fil_codigo = old.fil_codigo and
        requisicaovisualizada.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaovisualizada.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from exportaintegracaooperadora
      where
        exportaintegracaooperadora.fil_codigo = old.fil_codigo and
        exportaintegracaooperadora.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela exportaintegracaooperadora.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaoimagens
      where
        requisicaoimagens.fil_codigo = old.fil_codigo and
        requisicaoimagens.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaoimagens.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from logsms
      where
        logsms.fil_codigo = old.fil_codigo and
        logsms.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela logsms.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaotaxa
      where
        requisicaotaxa.fil_codigo = old.fil_codigo and
        requisicaotaxa.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaotaxa.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from lotefilialrequisicao
      where
        lotefilialrequisicao.fil_codigo = old.fil_codigo and
        lotefilialrequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela lotefilialrequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaonaoconformidade
      where
        requisicaonaoconformidade.fil_codigo = old.fil_codigo and
        requisicaonaoconformidade.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaonaoconformidade.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaolog
      where
        requisicaolog.fil_codigo = old.fil_codigo and
        requisicaolog.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaolog.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from agendamento
      where
        agendamento.fil_codigo = old.fil_codigo and
        agendamento.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela agendamento.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaoweb
      where
        requisicaoweb.fil_codigo = old.fil_codigo and
        requisicaoweb.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaoweb.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaonotafiscal
      where
        requisicaonotafiscal.fil_codigo = old.fil_codigo and
        requisicaonotafiscal.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaonotafiscal.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaolabexterno
      where
        requisicaolabexterno.fil_codigo = old.fil_codigo and
        requisicaolabexterno.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaolabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaocid10
      where
        requisicaocid10.fil_codigo = old.fil_codigo and
        requisicaocid10.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaocid10.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from loteexternorequisicao
      where
        loteexternorequisicao.fil_kodigo = old.fil_codigo and
        loteexternorequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela loteexternorequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from loteapoiorequisicao
      where
        loteapoiorequisicao.fil_codigo = old.fil_codigo and
        loteapoiorequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela loteapoiorequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaousuario
      where
        requisicaousuario.fil_codigo = old.fil_codigo and
        requisicaousuario.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaousuario.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaolanctocaixa
      where
        requisicaolanctocaixa.fil_codigo = old.fil_codigo and
        requisicaolanctocaixa.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaolanctocaixa.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examescontrole
      where
        examescontrole.fil_codigo = old.fil_codigo and
        examescontrole.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examescontrole.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaorequisicao
      where
        requisicaorequisicao.fil_codigo = old.fil_codigo and
        requisicaorequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaorequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaomedicamento
      where
        requisicaomedicamento.fil_codigo = old.fil_codigo and
        requisicaomedicamento.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaomedicamento.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from faturarequisicao
      where
        faturarequisicao.fil_kodigo = old.fil_codigo and
        faturarequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela faturarequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from requisicaorequisicao
      where
        requisicaorequisicao.fil_codigo = old.fil_codigo and
        requisicaorequisicao.req_kodigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaorequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicao
      where
        examerequisicao.fil_codigo = old.fil_codigo and
        examerequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicao.'';
    end if;
  end if;
  select count(*) into numrows
    from produtoalimentos
    where
      new.fil_codigo = produtoalimentos.fil_codigo and
      new.cpl_codigo = produtoalimentos.cpl_codigo and
      new.pal_codigo = produtoalimentos.pal_codigo;
    tmp:=''produtoalimentos|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''cpl_codigo='' || new.cpl_codigo || ''|'';
    
      tmp:=tmp || ''pal_codigo='' || new.pal_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.cpl_codigo is not null and
    new.pal_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela produtoalimentos. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from usuario
    where
      new.usr_coddesconto = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_coddesconto || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_coddesconto is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from usuario
    where
      new.usr_codelegibilidade = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codelegibilidade || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codelegibilidade is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from formapagto
    where
      new.fpg_codigo = formapagto.fpg_codigo and
      new.fil_codigo = formapagto.fil_codigo;
    tmp:=''formapagto|'';
    
      tmp:=tmp || ''fpg_codigo='' || new.fpg_codigo || ''|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fpg_codigo is not null and
    new.fil_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela formapagto. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from pais
    where
      new.fil_codigo = pais.fil_codigo and
      new.pai_codigo = pais.pai_codigo;
    tmp:=''pais|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''pai_codigo='' || new.pai_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.pai_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela pais. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from usuario
    where
      new.usr_codguiarepasse = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codguiarepasse || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codguiarepasse is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from convenios
    where
      new.fil_codigo = convenios.fil_codigo and
      new.con_codrepasse = convenios.con_codigo;
    tmp:=''convenios|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''con_codigo='' || new.con_codrepasse || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.con_codrepasse is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela convenios. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from orcamento
    where
      new.fil_codigo = orcamento.fil_codigo and
      new.orc_codigo = orcamento.orc_codigo;
    tmp:=''orcamento|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''orc_codigo='' || new.orc_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.orc_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela orcamento. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from unidadesaude
    where
      new.fil_codigo = unidadesaude.fil_codigo and
      new.uns_codigo = unidadesaude.uns_codigo;
    tmp:=''unidadesaude|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''uns_codigo='' || new.uns_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.uns_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela unidadesaude. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from usuario
    where
      new.usr_codexcluida = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codexcluida || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codexcluida is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from entidade
    where
      new.fil_codigo = entidade.fil_codigo and
      new.ent_codigo = entidade.ent_codigo;
    tmp:=''entidade|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''ent_codigo='' || new.ent_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.ent_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela entidade. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from embalagemproduto
    where
      new.fil_codigo = embalagemproduto.fil_codigo and
      new.emb_codigo = embalagemproduto.emb_codigo;
    tmp:=''embalagemproduto|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''emb_codigo='' || new.emb_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.emb_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela embalagemproduto. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from unidademedida
    where
      new.fil_codigo = unidademedida.fil_codigo and
      new.unm_codigo = unidademedida.unm_codigo;
    tmp:=''unidademedida|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''unm_codigo='' || new.unm_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.unm_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela unidademedida. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from situacao
    where
      new.fil_codigo = situacao.fil_codigo and
      new.sit_codigo = situacao.sit_codigo;
    tmp:=''situacao|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''sit_codigo='' || new.sit_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.sit_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela situacao. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from alahospital
    where
      new.fil_codigo = alahospital.fil_codigo and
      new.ala_codigo = alahospital.ala_codigo;
    tmp:=''alahospital|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''ala_codigo='' || new.ala_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.ala_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela alahospital. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from filiais_postocoleta
    where
      new.fil_codcopia = filiais_postocoleta.fil_codigo;
    tmp:=''filiais_postocoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codcopia || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codcopia is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela filiais_postocoleta. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from usuario
    where
      new.usr_codabertura = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codabertura || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codabertura is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from estacoes
    where
      new.est_codigo = estacoes.est_codigo;
    tmp:=''estacoes|'';
    
      tmp:=tmp || ''est_codigo='' || new.est_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.est_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela estacoes. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from usuario
    where
      new.usr_codigo = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from filiais_postocoleta
    where
      new.fil_codigo = filiais_postocoleta.fil_codigo;
    tmp:=''filiais_postocoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela filiais_postocoleta. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from coletas
    where
      new.fil_codigo = coletas.fil_codigo and
      new.col_codigo = coletas.col_codigo;
    tmp:=''coletas|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''col_codigo='' || new.col_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.col_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela coletas. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from destino
    where
      new.fil_codigo = destino.fil_codigo and
      new.des_codigo = destino.des_codigo;
    tmp:=''destino|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''des_codigo='' || new.des_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.des_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela destino. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from convenios
    where
      new.fil_codigo = convenios.fil_codigo and
      new.con_codigo = convenios.con_codigo;
    tmp:=''convenios|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''con_codigo='' || new.con_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.con_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela convenios. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from medico
    where
      new.fil_codigo = medico.fil_codigo and
      new.med_conselho = medico.med_conselho and
      new.med_crm = medico.med_crm and
      new.med_uf = medico.med_uf;
    tmp:=''medico|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''med_conselho='' || new.med_conselho || ''|'';
    
      tmp:=tmp || ''med_crm='' || new.med_crm || ''|'';
    
      tmp:=tmp || ''med_uf='' || new.med_uf || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.med_conselho is not null and
    new.med_crm is not null and
    new.med_uf is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela medico. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from paciente
    where
      new.fil_codigo = paciente.fil_codigo and
      new.pac_codigo = paciente.pac_codigo;
    tmp:=''paciente|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''pac_codigo='' || new.pac_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela paciente. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;


return old;
end;'
language 'plpgsql';
					
create trigger tu_requisicao
after update on requisicao
for each row execute procedure fn_tu_requisicao();


--drop function fn_ti_requisicaovisualizada() cascade;

create function fn_ti_requisicaovisualizada() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from requisicao
      where
        new.fil_codigo = requisicao.fil_codigo and
        new.req_codigo = requisicao.req_codigo;
    tmp:=''requisicao|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''req_codigo='' || new.req_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.req_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela requisicao. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;


return new;
end;'
language 'plpgsql';
					
create trigger ti_requisicaovisualizada
after insert on requisicaovisualizada
for each row execute procedure fn_ti_requisicaovisualizada();


--drop function fn_tu_requisicaovisualizada() cascade;

create function fn_tu_requisicaovisualizada() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  select count(*) into numrows
    from requisicao
    where
      new.fil_codigo = requisicao.fil_codigo and
      new.req_codigo = requisicao.req_codigo;
    tmp:=''requisicao|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''req_codigo='' || new.req_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.req_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela requisicao. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;


return old;
end;'
language 'plpgsql';
					
create trigger tu_requisicaovisualizada
after update on requisicaovisualizada
for each row execute procedure fn_tu_requisicaovisualizada();




insert into atualizacoes(atu_nome) values ('v17070004_270917.sql');

drop table examessyslab cascade;

create table examessyslab (
       fil_codigo           integer not null,
       lae_codigo           integer not null,
       sys_codexame         varchar(8) not null,
       sys_codmaterial      varchar(5) not null,       
       sys_descricaoexame   varchar(100),
       sys_xml              text
);

create unique index xpkexamessyslab on examessyslab
(
       fil_codigo,
       lae_codigo,
       sys_codexame,
       sys_codmaterial
);

create index xif1examessyslab on examessyslab
(
       fil_codigo,
       lae_codigo
);


alter table examessyslab
       add primary key (fil_codigo, lae_codigo, sys_codexame, 
              sys_codmaterial);


drop function fn_ti_examessyslab() cascade;

create function fn_ti_examessyslab() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from labexterno
      where
        new.fil_codigo = labexterno.fil_codigo and
        new.lae_codigo = labexterno.lae_codigo;
    tmp:=''labexterno|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''lae_codigo='' || new.lae_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela labexterno. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;


return new;
end;'
language 'plpgsql';
					
create trigger ti_examessyslab
after insert on examessyslab
for each row execute procedure fn_ti_examessyslab();


drop function fn_tu_examessyslab() cascade;

create function fn_tu_examessyslab() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  select count(*) into numrows
    from labexterno
    where
      new.fil_codigo = labexterno.fil_codigo and
      new.lae_codigo = labexterno.lae_codigo;
    tmp:=''labexterno|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''lae_codigo='' || new.lae_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela labexterno. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;


return old;
end;'
language 'plpgsql';
					
create trigger tu_examessyslab
after update on examessyslab
for each row execute procedure fn_tu_examessyslab();


drop function fn_td_labexterno() cascade;

create function fn_td_labexterno() returns opaque as '
declare
	numrows integer;										 
begin
    delete from examessyslab
      where
        examessyslab.fil_codigo = old.fil_codigo and
        examessyslab.lae_codigo = old.lae_codigo;

    delete from examesunilab
      where
        examesunilab.fil_codigo = old.fil_codigo and
        examesunilab.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from filiais_postocoleta
      where
        filiais_postocoleta.fil_codigo = old.fil_codigo and
        filiais_postocoleta.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela filiais_postocoleta.'';
    end if;

    delete from logimportacaolabexterno
      where
        logimportacaolabexterno.fil_codigo = old.fil_codigo and
        logimportacaolabexterno.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from examessolucao
      where
        examessolucao.fil_codigo = old.fil_codigo and
        examessolucao.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examessolucao.'';
    end if;

    select count(*) into numrows
      from examesdb
      where
        examesdb.fil_codigo = old.fil_codigo and
        examesdb.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examesdb.'';
    end if;

    delete from examesatitude
      where
        examesatitude.fil_codigo = old.fil_codigo and
        examesatitude.lae_codigo = old.lae_codigo;

    delete from examesbalague
      where
        examesbalague.fil_codigo = old.fil_codigo and
        examesbalague.lae_codigo = old.lae_codigo;

    delete from examesdelta
      where
        examesdelta.fil_codigo = old.fil_codigo and
        examesdelta.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from examematcoletalabexterno
      where
        examematcoletalabexterno.fil_codigo = old.fil_codigo and
        examematcoletalabexterno.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examematcoletalabexterno.'';
    end if;

    select count(*) into numrows
      from examesmatrix
      where
        examesmatrix.fil_codigo = old.fil_codigo and
        examesmatrix.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examesmatrix.'';
    end if;

    select count(*) into numrows
      from examesrede
      where
        examesrede.fil_codigo = old.fil_codigo and
        examesrede.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examesrede.'';
    end if;

    delete from examesreacao
      where
        examesreacao.fil_codigo = old.fil_codigo and
        examesreacao.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from pacientelabexterno
      where
        pacientelabexterno.fil_codigo = old.fil_codigo and
        pacientelabexterno.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela pacientelabexterno.'';
    end if;

    select count(*) into numrows
      from requisicaolabexterno
      where
        requisicaolabexterno.fil_codigo = old.fil_codigo and
        requisicaolabexterno.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela requisicaolabexterno.'';
    end if;

    delete from examessergiofranco
      where
        examessergiofranco.fil_codigo = old.fil_codigo and
        examessergiofranco.lae_codigo = old.lae_codigo;

    delete from examesalvaro
      where
        examesalvaro.fil_codigo = old.fil_codigo and
        examesalvaro.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from examesjalis
      where
        examesjalis.fil_codigo = old.fil_codigo and
        examesjalis.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examesjalis.'';
    end if;

    delete from examespardini
      where
        examespardini.fil_codigo = old.fil_codigo and
        examespardini.lae_codigo = old.lae_codigo;

    select count(*) into numrows
      from loteexterno
      where
        loteexterno.fil_codigo = old.fil_codigo and
        loteexterno.lae_codigo = old.lae_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela loteexterno.'';
    end if;


return old;
end;'
language 'plpgsql';
					
create trigger td_labexterno
after delete on labexterno
for each row execute procedure fn_td_labexterno();


drop function fn_ti_labexterno() cascade;

create function fn_ti_labexterno() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from prazoentrega
      where
        new.fil_codigo = prazoentrega.fil_codigo and
        new.prz_codigo = prazoentrega.prz_codigo;
    tmp:=''prazoentrega|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''prz_codigo='' || new.prz_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.prz_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela prazoentrega. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from metodologia
      where
        new.fil_codigo = metodologia.fil_codigo and
        new.met_codigo = metodologia.met_codigo;
    tmp:=''metodologia|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''met_codigo='' || new.met_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.met_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela metodologia. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from setores
      where
        new.fil_codigo = setores.fil_codigo and
        new.set_codigo = setores.set_codigo;
    tmp:=''setores|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''set_codigo='' || new.set_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.set_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela setores. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from usuario
      where
        new.usr_codconferir = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codconferir || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codconferir is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from filiais_postocoleta
      where
        new.fil_codigo = filiais_postocoleta.fil_codigo;
    tmp:=''filiais_postocoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela filiais_postocoleta. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;


return new;
end;'
language 'plpgsql';
					
create trigger ti_labexterno
after insert on labexterno
for each row execute procedure fn_ti_labexterno();


drop function fn_tu_labexterno() cascade;

create function fn_tu_labexterno() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examessyslab
      where
        examessyslab.fil_codigo = old.fil_codigo and
        examessyslab.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examessyslab.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesunilab
      where
        examesunilab.fil_codigo = old.fil_codigo and
        examesunilab.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesunilab.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from filiais_postocoleta
      where
        filiais_postocoleta.fil_codigo = old.fil_codigo and
        filiais_postocoleta.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela filiais_postocoleta.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from logimportacaolabexterno
      where
        logimportacaolabexterno.fil_codigo = old.fil_codigo and
        logimportacaolabexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela logimportacaolabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examessolucao
      where
        examessolucao.fil_codigo = old.fil_codigo and
        examessolucao.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examessolucao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesdb
      where
        examesdb.fil_codigo = old.fil_codigo and
        examesdb.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesdb.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesatitude
      where
        examesatitude.fil_codigo = old.fil_codigo and
        examesatitude.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesatitude.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesbalague
      where
        examesbalague.fil_codigo = old.fil_codigo and
        examesbalague.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesbalague.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesdelta
      where
        examesdelta.fil_codigo = old.fil_codigo and
        examesdelta.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesdelta.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examematcoletalabexterno
      where
        examematcoletalabexterno.fil_codigo = old.fil_codigo and
        examematcoletalabexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematcoletalabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesmatrix
      where
        examesmatrix.fil_codigo = old.fil_codigo and
        examesmatrix.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesmatrix.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesrede
      where
        examesrede.fil_codigo = old.fil_codigo and
        examesrede.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesrede.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesreacao
      where
        examesreacao.fil_codigo = old.fil_codigo and
        examesreacao.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesreacao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from pacientelabexterno
      where
        pacientelabexterno.fil_codigo = old.fil_codigo and
        pacientelabexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela pacientelabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from requisicaolabexterno
      where
        requisicaolabexterno.fil_codigo = old.fil_codigo and
        requisicaolabexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaolabexterno.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examessergiofranco
      where
        examessergiofranco.fil_codigo = old.fil_codigo and
        examessergiofranco.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examessergiofranco.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesalvaro
      where
        examesalvaro.fil_codigo = old.fil_codigo and
        examesalvaro.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesalvaro.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examesjalis
      where
        examesjalis.fil_codigo = old.fil_codigo and
        examesjalis.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesjalis.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from examespardini
      where
        examespardini.fil_codigo = old.fil_codigo and
        examespardini.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examespardini.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.lae_codigo <> new.lae_codigo) then
    select count(*)
      from loteexterno
      where
        loteexterno.fil_codigo = old.fil_codigo and
        loteexterno.lae_codigo = old.lae_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela loteexterno.'';
    end if;
  end if;
  select count(*) into numrows
    from prazoentrega
    where
      new.fil_codigo = prazoentrega.fil_codigo and
      new.prz_codigo = prazoentrega.prz_codigo;
    tmp:=''prazoentrega|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''prz_codigo='' || new.prz_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.prz_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela prazoentrega. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from metodologia
    where
      new.fil_codigo = metodologia.fil_codigo and
      new.met_codigo = metodologia.met_codigo;
    tmp:=''metodologia|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''met_codigo='' || new.met_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.met_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela metodologia. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from setores
    where
      new.fil_codigo = setores.fil_codigo and
      new.set_codigo = setores.set_codigo;
    tmp:=''setores|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''set_codigo='' || new.set_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.set_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela setores. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from usuario
    where
      new.usr_codconferir = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codconferir || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codconferir is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from filiais_postocoleta
    where
      new.fil_codigo = filiais_postocoleta.fil_codigo;
    tmp:=''filiais_postocoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela filiais_postocoleta. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;


return old;
end;'
language 'plpgsql';
					
create trigger tu_labexterno
after update on labexterno
for each row execute procedure fn_tu_labexterno();




insert into atualizacoes(atu_nome) values ('v17070005_051017.sql');


