update exames set exa_tipobpa = 'I' where exa_tipobpa is null;

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

alter table labexterno add lae_agruparmultiguias boolean default false;

create table agendamentoexamerequisicao (
       fil_codigo           integer not null,
       agd_codigo           integer not null,
       exa_codigo           varchar(5) not null,
       mco_codigo           integer not null,
       req_codigo           integer not null
);

create unique index xpkagendamentoexamerequisicao on agendamentoexamerequisicao
(
       fil_codigo,
       agd_codigo,
       exa_codigo,
       mco_codigo,
       req_codigo
);

create index xif1agendamentoexamerequisicao on agendamentoexamerequisicao
(
       fil_codigo,
       agd_codigo
);

create index xif2agendamentoexamerequisicao on agendamentoexamerequisicao
(
       fil_codigo,
       exa_codigo,
       mco_codigo,
       req_codigo
);


alter table agendamentoexamerequisicao
       add primary key (fil_codigo, agd_codigo, exa_codigo, 
              mco_codigo, req_codigo);



create function fn_td_agendamento() returns opaque as '
declare
	numrows integer;										 
begin
    select count(*) into numrows
      from agendamentoexamerequisicao
      where
        agendamentoexamerequisicao.fil_codigo = old.fil_codigo and
        agendamentoexamerequisicao.agd_codigo = old.agd_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela agendamentoexamerequisicao.'';
    end if;


return old;
end;'
language 'plpgsql';
					
create trigger td_agendamento
after delete on agendamento
for each row execute procedure fn_td_agendamento();


drop function fn_ti_agendamento() cascade;

create function fn_ti_agendamento() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from usuario
      where
        new.usr_codhorarioanexado = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codhorarioanexado || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codhorarioanexado 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_codbloqueado = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codbloqueado || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codbloqueado 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_codfinalizado = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codfinalizado || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codfinalizado 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_codemcoleta = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codemcoleta || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codemcoleta 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_codremarcado = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codremarcado || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codremarcado 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 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;

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

    if (
      new.usr_codcancelamento 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 salaatendimento
      where
        new.fil_codigo = salaatendimento.fil_codigo and
        new.sal_codigo = salaatendimento.sal_codigo;
    tmp:=''salaatendimento|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''sal_codigo='' || new.sal_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.sal_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela salaatendimento. 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;


return new;
end;'
language 'plpgsql';
					
create trigger ti_agendamento
after insert on agendamento
for each row execute procedure fn_ti_agendamento();


drop function fn_tu_agendamento() cascade;

create function fn_tu_agendamento() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.agd_codigo <> new.agd_codigo) then
    select count(*)
      from agendamentoexamerequisicao
      where
        agendamentoexamerequisicao.fil_codigo = old.fil_codigo and
        agendamentoexamerequisicao.agd_codigo = old.agd_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela agendamentoexamerequisicao.'';
    end if;
  end if;
  select count(*) into numrows
    from usuario
    where
      new.usr_codhorarioanexado = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codhorarioanexado || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codhorarioanexado 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_codbloqueado = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codbloqueado || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codbloqueado 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_codfinalizado = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codfinalizado || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codfinalizado 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_codemcoleta = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codemcoleta || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codemcoleta 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_codremarcado = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codremarcado || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codremarcado 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 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;

  select count(*) into numrows
    from usuario
    where
      new.usr_codcancelamento = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codcancelamento || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codcancelamento 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 salaatendimento
    where
      new.fil_codigo = salaatendimento.fil_codigo and
      new.sal_codigo = salaatendimento.sal_codigo;
    tmp:=''salaatendimento|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''sal_codigo='' || new.sal_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.sal_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela salaatendimento. 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;


return old;
end;'
language 'plpgsql';
					
create trigger tu_agendamento
after update on agendamento
for each row execute procedure fn_tu_agendamento();


--drop function fn_ti_agendamentoexamerequisicao() cascade;

create function fn_ti_agendamentoexamerequisicao() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from examerequisicao
      where
        new.fil_codigo = examerequisicao.fil_codigo and
        new.exa_codigo = examerequisicao.exa_codigo and
        new.mco_codigo = examerequisicao.mco_codigo and
        new.req_codigo = examerequisicao.req_codigo;
    tmp:=''examerequisicao|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_codigo || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_codigo || ''|'';
    
      tmp:=tmp || ''req_codigo='' || new.req_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 examerequisicao. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from agendamento
      where
        new.fil_codigo = agendamento.fil_codigo and
        new.agd_codigo = agendamento.agd_codigo;
    tmp:=''agendamento|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''agd_codigo='' || new.agd_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 agendamento. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;


return new;
end;'
language 'plpgsql';
					
create trigger ti_agendamentoexamerequisicao
after insert on agendamentoexamerequisicao
for each row execute procedure fn_ti_agendamentoexamerequisicao();


--drop function fn_tu_agendamentoexamerequisicao() cascade;

create function fn_tu_agendamentoexamerequisicao() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  select count(*) into numrows
    from examerequisicao
    where
      new.fil_codigo = examerequisicao.fil_codigo and
      new.exa_codigo = examerequisicao.exa_codigo and
      new.mco_codigo = examerequisicao.mco_codigo and
      new.req_codigo = examerequisicao.req_codigo;
    tmp:=''examerequisicao|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_codigo || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_codigo || ''|'';
    
      tmp:=tmp || ''req_codigo='' || new.req_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 examerequisicao. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from agendamento
    where
      new.fil_codigo = agendamento.fil_codigo and
      new.agd_codigo = agendamento.agd_codigo;
    tmp:=''agendamento|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''agd_codigo='' || new.agd_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 agendamento. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;


return old;
end;'
language 'plpgsql';
					
create trigger tu_agendamentoexamerequisicao
after update on agendamentoexamerequisicao
for each row execute procedure fn_tu_agendamentoexamerequisicao();

drop function fn_td_examerequisicao() cascade;
create function fn_td_examerequisicao() returns opaque as '
declare 
  numrows integer;
begin

delete from agendamentoexamerequisicao
      where
        agendamentoexamerequisicao.fil_codigo = old.fil_codigo and
        agendamentoexamerequisicao.exa_codigo = old.exa_codigo and
        agendamentoexamerequisicao.mco_codigo = old.mco_codigo and
        agendamentoexamerequisicao.req_codigo = old.req_codigo;

delete from exportaintegracaohospital
      where
        exportaintegracaohospital.fil_codigo = old.fil_codigo and
        exportaintegracaohospital.exa_codigo = old.exa_codigo and
        exportaintegracaohospital.mco_codigo = old.mco_codigo and
        exportaintegracaohospital.req_codigo = old.req_codigo;

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

delete from examerequisicaohistoricosetor
      where
        examerequisicaohistoricosetor.fil_codigo = old.fil_codigo and
        examerequisicaohistoricosetor.exa_codigo = old.exa_codigo and
        examerequisicaohistoricosetor.mco_codigo = old.mco_codigo and
        examerequisicaohistoricosetor.req_codigo = old.req_codigo;

delete from examerequisicaoetiquetas
      where
        examerequisicaoetiquetas.fil_codigo = old.fil_codigo and
        examerequisicaoetiquetas.exa_codigo = old.exa_codigo and
        examerequisicaoetiquetas.mco_codigo = old.mco_codigo and
        examerequisicaoetiquetas.req_codigo = old.req_codigo;

delete from examerequisicaoemailatraso
      where
        examerequisicaoemailatraso.fil_codigo = old.fil_codigo and
        examerequisicaoemailatraso.exa_codigo = old.exa_codigo and
        examerequisicaoemailatraso.mco_codigo = old.mco_codigo and
        examerequisicaoemailatraso.req_codigo = old.req_codigo;

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

delete from examerequisicaoincerteza
      where
        examerequisicaoincerteza.fil_codigo = old.fil_codigo and
        examerequisicaoincerteza.exa_codigo = old.exa_codigo and
        examerequisicaoincerteza.mco_codigo = old.mco_codigo and
        examerequisicaoincerteza.req_codigo = old.req_codigo;

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

delete from examerequisicaoresultado
      where
        examerequisicaoresultado.fil_codigo = old.fil_codigo and
        examerequisicaoresultado.exa_codigo = old.exa_codigo and
        examerequisicaoresultado.mco_codigo = old.mco_codigo and
        examerequisicaoresultado.req_codigo = old.req_codigo;

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

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

delete from examerequisicaotrocas
      where
        examerequisicaotrocas.fil_codigo = old.fil_codigo and
        examerequisicaotrocas.exa_codigo = old.exa_codigo and
        examerequisicaotrocas.mco_codigo = old.mco_codigo and
        examerequisicaotrocas.req_codigo = old.req_codigo;

delete from examerequisicaohistoricolaudo
      where
        examerequisicaohistoricolaudo.fil_codigo = old.fil_codigo and
        examerequisicaohistoricolaudo.exa_codigo = old.exa_codigo and
        examerequisicaohistoricolaudo.mco_codigo = old.mco_codigo and
        examerequisicaohistoricolaudo.req_codigo = old.req_codigo;

delete from examerequisicaosetor
      where
        examerequisicaosetor.fil_codigo = old.fil_codigo and
        examerequisicaosetor.exa_codigo = old.exa_codigo and
        examerequisicaosetor.mco_codigo = old.mco_codigo and
        examerequisicaosetor.req_codigo = old.req_codigo;

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

delete from examerequisicaosituacoes
      where
        examerequisicaosituacoes.fil_codigo = old.fil_codigo and
        examerequisicaosituacoes.exa_codigo = old.exa_codigo and
        examerequisicaosituacoes.mco_codigo = old.mco_codigo and
        examerequisicaosituacoes.req_codigo = old.req_codigo;

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

delete from examerequisicaorecipiente
      where
        examerequisicaorecipiente.fil_codigo = old.fil_codigo and
        examerequisicaorecipiente.exa_codigo = old.exa_codigo and
        examerequisicaorecipiente.mco_codigo = old.mco_codigo and
        examerequisicaorecipiente.req_codigo = old.req_codigo;

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

delete from interfaceexamerequisicao
      where
        interfaceexamerequisicao.fil_codigo = old.fil_codigo and
        interfaceexamerequisicao.exa_codigo = old.exa_codigo and
        interfaceexamerequisicao.mco_codigo = old.mco_codigo and
        interfaceexamerequisicao.req_codigo = old.req_codigo;

delete from materialexamerequis
      where
        materialexamerequis.fil_codigo = old.fil_codigo and
        materialexamerequis.exa_codigo = old.exa_codigo and
        materialexamerequis.mco_codigo = old.mco_codigo and
        materialexamerequis.req_codigo = old.req_codigo;



delete from examerequisicaoresultado
 where fil_codigo = old.fil_codigo
   and req_codigo = old.req_codigo
   and exa_codigo = old.exa_codigo
   and mco_codigo = old.mco_codigo;


return old;

end'
language 'plpgsql';



create trigger td_examerequisicao 
  after delete on examerequisicao
for each row execute procedure fn_td_examerequisicao();

drop function fn_ti_examerequisicao() cascade;

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

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

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

    if (
      new.usr_codduplaconferencia 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_codsolicitadotiss = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codsolicitadotiss || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codsolicitadotiss 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 examematcoleta
      where
        new.fil_codigo = examematcoleta.fil_codigo and
        new.exa_codigopai = examematcoleta.exa_codigo and
        new.mco_codigopai = examematcoleta.mco_codigo;
    tmp:=''examematcoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_codigopai || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_codigopai || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

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

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

    if (
      new.usr_codcoletar 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_codtransportechegada = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codtransportechegada || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codtransportechegada 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_codtransportesaida = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codtransportesaida || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codtransportesaida 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_codtrocalayout = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codtrocalayout || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codtrocalayout 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_codalteracaopreco = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codalteracaopreco || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codalteracaopreco 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_codrecoleta = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codrecoleta || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codrecoleta 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_codfaturarepasse = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codfaturarepasse || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codfaturarepasse 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_codrepeticao = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codrepeticao || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codrepeticao 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_codguia = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codguia || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codguia 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_codexcluido = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codexcluido || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codexcluido 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_codmaterialsetor = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codmaterialsetor || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codmaterialsetor 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_codloteexterno = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codloteexterno || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codloteexterno 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_codetqtriagem = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codetqtriagem || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codetqtriagem 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_codetqcoleta = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codetqcoleta || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codetqcoleta 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_codtriagem = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codtriagem || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codtriagem 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_codnaofaturar = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codnaofaturar || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codnaofaturar 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_codcortesia = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codcortesia || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codcortesia 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_codmapa = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codmapa || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codmapa 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_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 examematcoleta
      where
        new.fil_codigo = examematcoleta.fil_codigo and
        new.exa_codigo = examematcoleta.exa_codigo and
        new.mco_codigo = examematcoleta.mco_codigo;
    tmp:=''examematcoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_codigo || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_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 examematcoleta. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

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

    if (
      new.usr_codimpressao 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_codentrega = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codentrega || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codentrega 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_codfatura = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codfatura || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codfatura 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_codmaterial = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codmaterial || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codmaterial 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_coddigitador = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_coddigitador || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_coddigitador 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_codassina = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codassina || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.usr_codassina 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 materialcoleta
      where
        new.fil_codigo = materialcoleta.fil_codigo and
        new.mco_codigo = materialcoleta.mco_codigo;
    tmp:=''materialcoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.mco_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela materialcoleta. 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 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 (
      
      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;





insert into examerequisicaoresultado(fil_codigo, req_codigo, exa_codigo, mco_codigo, ert_resultado) values (new.fil_codigo, new.req_codigo, new.exa_codigo, new.mco_codigo, new.exr_resultado);

/* troca o valor do campo de resultado na tabela exame requisicao */
new.exr_resultado = ''.'';

return new;

end'
language 'plpgsql';



create trigger ti_examerequisicao 
  after insert on examerequisicao
for each row execute procedure fn_ti_examerequisicao();


drop function fn_tu_b_examerequisicao() cascade;


create function fn_tu_b_examerequisicao() returns opaque as '
declare
  req bigint;
begin

select req_codigo into req from examerequisicaoresultado where fil_codigo = new.fil_codigo and req_codigo = new.req_codigo and exa_codigo = new.exa_codigo and mco_codigo = new.mco_codigo;
if (not found) then
  insert into examerequisicaoresultado(fil_codigo, req_codigo, exa_codigo, mco_codigo) values (new.fil_codigo, new.req_codigo, new.exa_codigo, new.mco_codigo);
end if;


if ((upper(new.exr_situacao) = upper(''l'') or upper(new.exr_situacao) = upper(''c'') or upper(new.exr_situacao) = upper(''i'') or upper(new.exr_situacao) = upper(''e'') or upper(new.exr_situacao) = upper(''p'')) and 
  new.exr_resultado is not null and length(new.exr_resultado) > 0) then
  update examerequisicaoresultado set ert_resultado = new.exr_resultado where fil_codigo = new.fil_codigo and req_codigo = new.req_codigo and exa_codigo = new.exa_codigo and mco_codigo = new.mco_codigo;
end if;

if ((new.exr_situacao is null or new.exr_situacao = '''' or upper(new.exr_situacao) = upper(''f'') or upper(new.exr_situacao) = upper(''t'') or upper(new.exr_situacao) = upper(''r''))) then
  update examerequisicaoresultado set ert_resultado = new.exr_resultado where fil_codigo = new.fil_codigo and req_codigo = new.req_codigo and exa_codigo = new.exa_codigo and mco_codigo = new.mco_codigo;
end if;


/* troca o valor do campo de resultado na tabela exame requisicao */
new.exr_resultado := null;

return new;

end'
language 'plpgsql';



create trigger tu_b_examerequisicao 
  before update on examerequisicao
for each row execute procedure fn_tu_b_examerequisicao();








drop function fn_tu_examerequisicao() cascade;


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

select count(*) into numrows
    from usuario
    where
      new.usr_codduplaconferencia = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codduplaconferencia || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codduplaconferencia 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_codsolicitadotiss = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codsolicitadotiss || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codsolicitadotiss 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 examematcoleta
    where
      new.fil_codigo = examematcoleta.fil_codigo and
      new.exa_codigopai = examematcoleta.exa_codigo and
      new.mco_codigopai = examematcoleta.mco_codigo;
    tmp:=''examematcoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_codigopai || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_codigopai || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.exa_codigopai is not null and
    new.mco_codigopai is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela examematcoleta. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

select count(*) into numrows
    from usuario
    where
      new.usr_codcoletar = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codcoletar || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codcoletar 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_codtransportechegada = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codtransportechegada || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codtransportechegada 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_codtransportesaida = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codtransportesaida || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codtransportesaida 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_codtrocalayout = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codtrocalayout || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codtrocalayout 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_codalteracaopreco = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codalteracaopreco || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codalteracaopreco 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_codrecoleta = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codrecoleta || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codrecoleta 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_codfaturarepasse = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codfaturarepasse || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codfaturarepasse 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_codrepeticao = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codrepeticao || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codrepeticao 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_codguia = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codguia || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codguia 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_codexcluido = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codexcluido || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codexcluido 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_codmaterialsetor = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codmaterialsetor || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codmaterialsetor 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_codloteexterno = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codloteexterno || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codloteexterno 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_codetqtriagem = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codetqtriagem || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codetqtriagem 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_codetqcoleta = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codetqcoleta || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codetqcoleta 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_codtriagem = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codtriagem || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codtriagem 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_codnaofaturar = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codnaofaturar || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codnaofaturar 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_codcortesia = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codcortesia || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codcortesia 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_codmapa = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codmapa || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codmapa 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_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 examematcoleta
    where
      new.fil_codigo = examematcoleta.fil_codigo and
      new.exa_codigo = examematcoleta.exa_codigo and
      new.mco_codigo = examematcoleta.mco_codigo;
    tmp:=''examematcoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_codigo || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_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 examematcoleta. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

select count(*) into numrows
    from usuario
    where
      new.usr_codimpressao = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codimpressao || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codimpressao 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_codentrega = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codentrega || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codentrega 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_codfatura = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codfatura || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codfatura 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_codmaterial = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codmaterial || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codmaterial 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_coddigitador = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_coddigitador || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_coddigitador 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_codassina = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codassina || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codassina 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 materialcoleta
    where
      new.fil_codigo = materialcoleta.fil_codigo and
      new.mco_codigo = materialcoleta.mco_codigo;
    tmp:=''materialcoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.mco_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela materialcoleta. 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 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 (
    
    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;


if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from agendamentoexamerequisicao
      where
        agendamentoexamerequisicao.fil_codigo = old.fil_codigo and
        agendamentoexamerequisicao.exa_codigo = old.exa_codigo and
        agendamentoexamerequisicao.mco_codigo = old.mco_codigo and
        agendamentoexamerequisicao.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 agendamentoexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from exportaintegracaohospital
      where
        exportaintegracaohospital.fil_codigo = old.fil_codigo and
        exportaintegracaohospital.exa_codigo = old.exa_codigo and
        exportaintegracaohospital.mco_codigo = old.mco_codigo and
        exportaintegracaohospital.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 exportaintegracaohospital.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from logids
      where
        logids.fil_codigo = old.fil_codigo and
        logids.exa_codigo = old.exa_codigo and
        logids.mco_codigo = old.mco_codigo and
        logids.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 logids.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaohistoricosetor
      where
        examerequisicaohistoricosetor.fil_codigo = old.fil_codigo and
        examerequisicaohistoricosetor.exa_codigo = old.exa_codigo and
        examerequisicaohistoricosetor.mco_codigo = old.mco_codigo and
        examerequisicaohistoricosetor.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 examerequisicaohistoricosetor.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoetiquetas
      where
        examerequisicaoetiquetas.fil_codigo = old.fil_codigo and
        examerequisicaoetiquetas.exa_codigo = old.exa_codigo and
        examerequisicaoetiquetas.mco_codigo = old.mco_codigo and
        examerequisicaoetiquetas.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 examerequisicaoetiquetas.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoemailatraso
      where
        examerequisicaoemailatraso.fil_codigo = old.fil_codigo and
        examerequisicaoemailatraso.exa_codigo = old.exa_codigo and
        examerequisicaoemailatraso.mco_codigo = old.mco_codigo and
        examerequisicaoemailatraso.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 examerequisicaoemailatraso.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaodadosbrutos
      where
        examerequisicaodadosbrutos.fil_codigo = old.fil_codigo and
        examerequisicaodadosbrutos.exa_codigo = old.exa_codigo and
        examerequisicaodadosbrutos.mco_codigo = old.mco_codigo and
        examerequisicaodadosbrutos.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 examerequisicaodadosbrutos.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoincerteza
      where
        examerequisicaoincerteza.fil_codigo = old.fil_codigo and
        examerequisicaoincerteza.exa_codigo = old.exa_codigo and
        examerequisicaoincerteza.mco_codigo = old.mco_codigo and
        examerequisicaoincerteza.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 examerequisicaoincerteza.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from lotefilialexamerequisicao
      where
        lotefilialexamerequisicao.fil_codigo = old.fil_codigo and
        lotefilialexamerequisicao.exa_codigo = old.exa_codigo and
        lotefilialexamerequisicao.mco_codigo = old.mco_codigo and
        lotefilialexamerequisicao.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 lotefilialexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoresultado
      where
        examerequisicaoresultado.fil_codigo = old.fil_codigo and
        examerequisicaoresultado.exa_codigo = old.exa_codigo and
        examerequisicaoresultado.mco_codigo = old.mco_codigo and
        examerequisicaoresultado.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 examerequisicaoresultado.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaolaminas
      where
        examerequisicaolaminas.fil_codigo = old.fil_codigo and
        examerequisicaolaminas.exa_codigo = old.exa_codigo and
        examerequisicaolaminas.mco_codigo = old.mco_codigo and
        examerequisicaolaminas.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 examerequisicaolaminas.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaohash
      where
        examerequisicaohash.fil_codigo = old.fil_codigo and
        examerequisicaohash.exa_codigo = old.exa_codigo and
        examerequisicaohash.mco_codigo = old.mco_codigo and
        examerequisicaohash.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 examerequisicaohash.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaotrocas
      where
        examerequisicaotrocas.fil_codigo = old.fil_codigo and
        examerequisicaotrocas.exa_codigo = old.exa_codigo and
        examerequisicaotrocas.mco_codigo = old.mco_codigo and
        examerequisicaotrocas.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 examerequisicaotrocas.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaohistoricolaudo
      where
        examerequisicaohistoricolaudo.fil_codigo = old.fil_codigo and
        examerequisicaohistoricolaudo.exa_codigo = old.exa_codigo and
        examerequisicaohistoricolaudo.mco_codigo = old.mco_codigo and
        examerequisicaohistoricolaudo.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 examerequisicaohistoricolaudo.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaosetor
      where
        examerequisicaosetor.fil_codigo = old.fil_codigo and
        examerequisicaosetor.exa_codigo = old.exa_codigo and
        examerequisicaosetor.mco_codigo = old.mco_codigo and
        examerequisicaosetor.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 examerequisicaosetor.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoguiaagrupada
      where
        examerequisicaoguiaagrupada.fil_codigo = old.fil_codigo and
        examerequisicaoguiaagrupada.exa_codigo = old.exa_codigo and
        examerequisicaoguiaagrupada.mco_codigo = old.mco_codigo and
        examerequisicaoguiaagrupada.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 examerequisicaoguiaagrupada.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaosituacoes
      where
        examerequisicaosituacoes.fil_codigo = old.fil_codigo and
        examerequisicaosituacoes.exa_codigo = old.exa_codigo and
        examerequisicaosituacoes.mco_codigo = old.mco_codigo and
        examerequisicaosituacoes.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 examerequisicaosituacoes.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from loteexternoexamerequisicao
      where
        loteexternoexamerequisicao.fil_kodigo = old.fil_codigo and
        loteexternoexamerequisicao.exa_codigo = old.exa_codigo and
        loteexternoexamerequisicao.mco_codigo = old.mco_codigo and
        loteexternoexamerequisicao.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 loteexternoexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaorecipiente
      where
        examerequisicaorecipiente.fil_codigo = old.fil_codigo and
        examerequisicaorecipiente.exa_codigo = old.exa_codigo and
        examerequisicaorecipiente.mco_codigo = old.mco_codigo and
        examerequisicaorecipiente.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 examerequisicaorecipiente.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from faturaexamerequisicao
      where
        faturaexamerequisicao.fil_kodigo = old.fil_codigo and
        faturaexamerequisicao.exa_codigo = old.exa_codigo and
        faturaexamerequisicao.mco_codigo = old.mco_codigo and
        faturaexamerequisicao.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 faturaexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from interfaceexamerequisicao
      where
        interfaceexamerequisicao.fil_codigo = old.fil_codigo and
        interfaceexamerequisicao.exa_codigo = old.exa_codigo and
        interfaceexamerequisicao.mco_codigo = old.mco_codigo and
        interfaceexamerequisicao.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 interfaceexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from materialexamerequis
      where
        materialexamerequis.fil_codigo = old.fil_codigo and
        materialexamerequis.exa_codigo = old.exa_codigo and
        materialexamerequis.mco_codigo = old.mco_codigo and
        materialexamerequis.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 materialexamerequis.'';
    end if;
  end if;


return new;

end'
language 'plpgsql';



create trigger tu_examerequisicao 
  after update on examerequisicao
for each row execute procedure fn_tu_examerequisicao();




CREATE TRIGGER agendamentoexamerequisicao_log AFTER INSERT OR UPDATE OR DELETE ON public.agendamentoexamerequisicao FOR EACH ROW EXECUTE PROCEDURE geralog();

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



create table conveniounidadesaude (
       fil_codigo           integer not null,
       con_codigo           integer not null,
       cus_qtdeexame        numeric(15,3),
       uns_codigo           varchar(7) not null
);

create unique index xpkconveniounidadesaude on conveniounidadesaude
(
       fil_codigo,
       con_codigo,
       uns_codigo
);

create index xif1conveniounidadesaude on conveniounidadesaude
(
       fil_codigo,
       con_codigo
);

create index xif2conveniounidadesaude on conveniounidadesaude
(
       fil_codigo,
       uns_codigo
);


alter table conveniounidadesaude
       add primary key (fil_codigo, con_codigo, uns_codigo);



drop function fn_td_convenios() cascade;

create function fn_td_convenios() returns opaque as '
declare
	numrows integer;										 
begin
    select count(*) into numrows
      from conveniounidadesaude
      where
        conveniounidadesaude.fil_codigo = old.fil_codigo and
        conveniounidadesaude.con_codigo = old.con_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela conveniounidadesaude.'';
    end if;

    delete from conveniosintegracaooperadora
      where
        conveniosintegracaooperadora.fil_codigo = old.fil_codigo and
        conveniosintegracaooperadora.con_codigo = old.con_codigo;

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

    delete from conveniocotaexamesituacao
      where
        conveniocotaexamesituacao.fil_codigo = old.fil_codigo and
        conveniocotaexamesituacao.con_codigo = old.con_codigo;

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

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

    delete from conveniostaxa
      where
        conveniostaxa.fil_codigo = old.fil_codigo and
        conveniostaxa.con_codigo = old.con_codigo;

    delete from convenioshistoricocota
      where
        convenioshistoricocota.fil_codigo = old.fil_codigo and
        convenioshistoricocota.con_codigo = old.con_codigo;

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

    delete from convenioapoiado
      where
        convenioapoiado.fil_codigo = old.fil_codigo and
        convenioapoiado.con_codigo = old.con_codigo;

    delete from apropriaplanoconta
      where
        apropriaplanoconta.fil_codigo = old.fil_codigo and
        apropriaplanoconta.con_codigo = old.con_codigo;

    delete from apropriacentrocusto
      where
        apropriacentrocusto.fil_codigo = old.fil_codigo and
        apropriacentrocusto.con_codigo = old.con_codigo;

    delete from contrassenharequisicao
      where
        contrassenharequisicao.fil_codigo = old.fil_codigo and
        contrassenharequisicao.con_codigo = old.con_codigo;

    delete from convenioignorarecebimento
      where
        convenioignorarecebimento.fil_codigo = old.fil_codigo and
        convenioignorarecebimento.con_codigo = old.con_codigo;

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

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

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

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

    delete from conveniosrepasse
      where
        conveniosrepasse.fil_codigo = old.fil_codigo and
        conveniosrepasse.con_codigo = old.con_codigo;

    delete from conveniospreco
      where
        conveniospreco.fil_codigo = old.fil_codigo and
        conveniospreco.con_codigo = old.con_codigo;

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

    delete from convenioentidade
      where
        convenioentidade.fil_codigo = old.fil_codigo and
        convenioentidade.con_codigo = old.con_codigo;

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

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

    delete from convenioscontatos
      where
        convenioscontatos.fil_codigo = old.fil_codigo and
        convenioscontatos.con_codigo = old.con_codigo;

    delete from medicoconvenioproibido
      where
        medicoconvenioproibido.fil_codigo = old.fil_codigo and
        medicoconvenioproibido.con_codigo = old.con_codigo;

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

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

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

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

    delete from exportaapoio
      where
        exportaapoio.fil_codigo = old.fil_codigo and
        exportaapoio.con_codigo = old.con_codigo;

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

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

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

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

    delete from examesmatconvenio
      where
        examesmatconvenio.fil_codigo = old.fil_codigo and
        examesmatconvenio.con_codigo = old.con_codigo;

    delete from conveniodesconto
      where
        conveniodesconto.fil_codigo = old.fil_codigo and
        conveniodesconto.con_codigo = old.con_codigo;

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

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

    delete from adicionalfatura
      where
        adicionalfatura.fil_codigo = old.fil_codigo and
        adicionalfatura.con_codigo = old.con_codigo;

    delete from despcobranca
      where
        despcobranca.fil_codigo = old.fil_codigo and
        despcobranca.con_codigo = old.con_codigo;

    delete from pacienteconvenio
      where
        pacienteconvenio.fil_codigo = old.fil_codigo and
        pacienteconvenio.con_codigo = old.con_codigo;

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

    delete from destinoconvlayout
      where
        destinoconvlayout.fil_codigo = old.fil_codigo and
        destinoconvlayout.con_codigo = old.con_codigo;

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

    delete from conveniosvencimento
      where
        conveniosvencimento.fil_codigo = old.fil_codigo and
        conveniosvencimento.con_codigo = old.con_codigo;


return old;
end;'
language 'plpgsql';
					
create trigger td_convenios
after delete on convenios
for each row execute procedure fn_td_convenios();


drop function fn_ti_convenios() cascade;

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

    if (
      new.lay_codigoapoio 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 layout. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

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

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

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

    if (
      new.fil_codigo is not null and
      new.cel_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela celulaestoque. 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 layout
      where
        new.lay_codigo = layout.lay_codigo and
        new.fil_codigo = layout.fil_codigo;
    tmp:=''layout|'';
    
      tmp:=tmp || ''lay_codigo='' || new.lay_codigo || ''|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.lay_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 layout. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

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

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

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

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

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

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

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

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

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

    if (
      new.fil_codigo is not null and
      new.tpe_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela tabelaprecoexames. 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 prioridade
      where
        new.fil_codigo = prioridade.fil_codigo and
        new.pri_codigo = prioridade.pri_codigo;
    tmp:=''prioridade|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''pri_codigo='' || new.pri_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

    if (
      new.fil_codigo is not null and
      new.pri_codigo is not null and
      numrows = 0
    ) then
      raise exception ''o registro nao pode ser inserido, pois um valor informado nao existe na tabela prioridade. 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 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;


return new;
end;'
language 'plpgsql';
					
create trigger ti_convenios
after insert on convenios
for each row execute procedure fn_ti_convenios();


drop function fn_tu_convenios() cascade;

create function fn_tu_convenios() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniounidadesaude
      where
        conveniounidadesaude.fil_codigo = old.fil_codigo and
        conveniounidadesaude.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniounidadesaude.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniosintegracaooperadora
      where
        conveniosintegracaooperadora.fil_codigo = old.fil_codigo and
        conveniosintegracaooperadora.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniosintegracaooperadora.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from exportaintegracaooperadora
      where
        exportaintegracaooperadora.fil_codigo = old.fil_codigo and
        exportaintegracaooperadora.con_codigo = old.con_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.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniocotaexamesituacao
      where
        conveniocotaexamesituacao.fil_codigo = old.fil_codigo and
        conveniocotaexamesituacao.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniocotaexamesituacao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniocotaexame
      where
        conveniocotaexame.fil_codigo = old.fil_codigo and
        conveniocotaexame.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniocotaexame.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniomatricula
      where
        conveniomatricula.fil_codigo = old.fil_codigo and
        conveniomatricula.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniomatricula.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniostaxa
      where
        conveniostaxa.fil_codigo = old.fil_codigo and
        conveniostaxa.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniostaxa.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from convenioshistoricocota
      where
        convenioshistoricocota.fil_codigo = old.fil_codigo and
        convenioshistoricocota.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela convenioshistoricocota.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from requisicaoweb
      where
        requisicaoweb.fil_codigo = old.fil_codigo and
        requisicaoweb.con_codigo = old.con_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.con_codigo <> new.con_codigo) then
    select count(*)
      from convenioapoiado
      where
        convenioapoiado.fil_codigo = old.fil_codigo and
        convenioapoiado.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela convenioapoiado.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from apropriaplanoconta
      where
        apropriaplanoconta.fil_codigo = old.fil_codigo and
        apropriaplanoconta.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela apropriaplanoconta.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from apropriacentrocusto
      where
        apropriacentrocusto.fil_codigo = old.fil_codigo and
        apropriacentrocusto.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela apropriacentrocusto.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from contrassenharequisicao
      where
        contrassenharequisicao.fil_codigo = old.fil_codigo and
        contrassenharequisicao.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela contrassenharequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from convenioignorarecebimento
      where
        convenioignorarecebimento.fil_codigo = old.fil_codigo and
        convenioignorarecebimento.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela convenioignorarecebimento.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from materialenviado
      where
        materialenviado.fil_codigo = old.fil_codigo and
        materialenviado.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialenviado.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from faturarequisicao
      where
        faturarequisicao.fil_codigo = old.fil_codigo and
        faturarequisicao.con_codigo = old.con_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.con_codigo <> new.con_codigo) then
    select count(*)
      from requisicao
      where
        requisicao.fil_codigo = old.fil_codigo and
        requisicao.con_codrepasse = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniosrepasse
      where
        conveniosrepasse.fil_codigo = old.fil_codigo and
        conveniosrepasse.con_codrepasse = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniosrepasse.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniosrepasse
      where
        conveniosrepasse.fil_codigo = old.fil_codigo and
        conveniosrepasse.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniosrepasse.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniospreco
      where
        conveniospreco.fil_codigo = old.fil_codigo and
        conveniospreco.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniospreco.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from orcamentoconvenio
      where
        orcamentoconvenio.fil_codigo = old.fil_codigo and
        orcamentoconvenio.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela orcamentoconvenio.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from convenioentidade
      where
        convenioentidade.fil_codigo = old.fil_codigo and
        convenioentidade.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela convenioentidade.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from notafiscal
      where
        notafiscal.fil_codigo = old.fil_codigo and
        notafiscal.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscal.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from receberpagar
      where
        receberpagar.fil_codigo = old.fil_codigo and
        receberpagar.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela receberpagar.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from convenioscontatos
      where
        convenioscontatos.fil_codigo = old.fil_codigo and
        convenioscontatos.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela convenioscontatos.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from medicoconvenioproibido
      where
        medicoconvenioproibido.fil_codigo = old.fil_codigo and
        medicoconvenioproibido.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela medicoconvenioproibido.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from medicoconveniotiss
      where
        medicoconveniotiss.fil_codigo = old.fil_codigo and
        medicoconveniotiss.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela medicoconveniotiss.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from paciente
      where
        paciente.fil_codigo = old.fil_codigo and
        paciente.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela paciente.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from examematconvenioprazo
      where
        examematconvenioprazo.fil_codigo = old.fil_codigo and
        examematconvenioprazo.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematconvenioprazo.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from loteapoio
      where
        loteapoio.fil_codigo = old.fil_codigo and
        loteapoio.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela loteapoio.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from exportaapoio
      where
        exportaapoio.fil_codigo = old.fil_codigo and
        exportaapoio.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela exportaapoio.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniomensagem
      where
        conveniomensagem.fil_codigo = old.fil_codigo and
        conveniomensagem.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniomensagem.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from fatura
      where
        fatura.fil_codigo = old.fil_codigo and
        fatura.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela fatura.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from agrupasituacao
      where
        agrupasituacao.fil_codigo = old.fil_codigo and
        agrupasituacao.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela agrupasituacao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from agrupaexameconvenio
      where
        agrupaexameconvenio.fil_codigo = old.fil_codigo and
        agrupaexameconvenio.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela agrupaexameconvenio.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from examesmatconvenio
      where
        examesmatconvenio.fil_codigo = old.fil_codigo and
        examesmatconvenio.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesmatconvenio.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniodesconto
      where
        conveniodesconto.fil_codigo = old.fil_codigo and
        conveniodesconto.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniodesconto.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from filialfatura
      where
        filialfatura.fil_codigo = old.fil_codigo and
        filialfatura.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela filialfatura.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from filialfatura
      where
        filialfatura.fil_codfat = old.fil_codigo and
        filialfatura.con_codfat = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela filialfatura.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from adicionalfatura
      where
        adicionalfatura.fil_codigo = old.fil_codigo and
        adicionalfatura.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela adicionalfatura.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from despcobranca
      where
        despcobranca.fil_codigo = old.fil_codigo and
        despcobranca.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela despcobranca.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from pacienteconvenio
      where
        pacienteconvenio.fil_codigo = old.fil_codigo and
        pacienteconvenio.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela pacienteconvenio.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from medicoconvenio
      where
        medicoconvenio.fil_codigo = old.fil_codigo and
        medicoconvenio.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela medicoconvenio.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from destinoconvlayout
      where
        destinoconvlayout.fil_codigo = old.fil_codigo and
        destinoconvlayout.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela destinoconvlayout.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from requisicao
      where
        requisicao.fil_codigo = old.fil_codigo and
        requisicao.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.con_codigo <> new.con_codigo) then
    select count(*)
      from conveniosvencimento
      where
        conveniosvencimento.fil_codigo = old.fil_codigo and
        conveniosvencimento.con_codigo = old.con_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniosvencimento.'';
    end if;
  end if;
  select count(*) into numrows
    from layout
    where
      new.lay_codigoapoio = layout.lay_codigo and
      new.fil_codigo = layout.fil_codigo;
    tmp:=''layout|'';
    
      tmp:=tmp || ''lay_codigo='' || new.lay_codigoapoio || ''|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.lay_codigoapoio 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 layout. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

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

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

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

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

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

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

  select count(*) into numrows
    from tabelaprecoexames
    where
      new.fil_codigo = tabelaprecoexames.fil_codigo and
      new.tpe_codigo = tabelaprecoexames.tpe_codigo;
    tmp:=''tabelaprecoexames|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''tpe_codigo='' || new.tpe_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.tpe_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela tabelaprecoexames. 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 prioridade
    where
      new.fil_codigo = prioridade.fil_codigo and
      new.pri_codigo = prioridade.pri_codigo;
    tmp:=''prioridade|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''pri_codigo='' || new.pri_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.pri_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela prioridade. 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 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;


return old;
end;'
language 'plpgsql';
					
create trigger tu_convenios
after update on convenios
for each row execute procedure fn_tu_convenios();


--drop function fn_ti_conveniounidadesaude() cascade;

create function fn_ti_conveniounidadesaude() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    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 (
      
      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 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 (
      
      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;


return new;
end;'
language 'plpgsql';
					
create trigger ti_conveniounidadesaude
after insert on conveniounidadesaude
for each row execute procedure fn_ti_conveniounidadesaude();


--drop function fn_tu_conveniounidadesaude() cascade;

create function fn_tu_conveniounidadesaude() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  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 (
    
    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 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 (
    
    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;


return old;
end;'
language 'plpgsql';
					
create trigger tu_conveniounidadesaude
after update on conveniounidadesaude
for each row execute procedure fn_tu_conveniounidadesaude();


drop function fn_td_unidadesaude() cascade;

create function fn_td_unidadesaude() returns opaque as '
declare
	numrows integer;										 
begin
    select count(*) into numrows
      from conveniounidadesaude
      where
        conveniounidadesaude.fil_codigo = old.fil_codigo and
        conveniounidadesaude.uns_codigo = old.uns_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela conveniounidadesaude.'';
    end if;

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

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


return old;
end;'
language 'plpgsql';
					
create trigger td_unidadesaude
after delete on unidadesaude
for each row execute procedure fn_td_unidadesaude();


drop function fn_ti_unidadesaude() cascade;

create function fn_ti_unidadesaude() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    select count(*) into numrows
      from bairro
      where
        new.fil_codigo = bairro.fil_codigo and
        new.bai_codigo = bairro.bai_codigo;
    tmp:=''bairro|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''bai_codigo='' || new.bai_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 bairro. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;

    select count(*) into numrows
      from cidades
      where
        new.fil_codigo = cidades.fil_codigo and
        new.cid_codigo = cidades.cid_codigo;
    tmp:=''cidades|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''cid_codigo='' || new.cid_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 cidades. 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_unidadesaude
after insert on unidadesaude
for each row execute procedure fn_ti_unidadesaude();


drop function fn_tu_unidadesaude() cascade;

create function fn_tu_unidadesaude() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.uns_codigo <> new.uns_codigo) then
    select count(*)
      from conveniounidadesaude
      where
        conveniounidadesaude.fil_codigo = old.fil_codigo and
        conveniounidadesaude.uns_codigo = old.uns_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conveniounidadesaude.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.uns_codigo <> new.uns_codigo) then
    select count(*)
      from paciente
      where
        paciente.fil_codigo = old.fil_codigo and
        paciente.uns_codigo = old.uns_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela paciente.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.uns_codigo <> new.uns_codigo) then
    select count(*)
      from requisicao
      where
        requisicao.fil_codigo = old.fil_codigo and
        requisicao.uns_codigo = old.uns_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicao.'';
    end if;
  end if;
  select count(*) into numrows
    from bairro
    where
      new.fil_codigo = bairro.fil_codigo and
      new.bai_codigo = bairro.bai_codigo;
    tmp:=''bairro|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''bai_codigo='' || new.bai_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 bairro. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

  select count(*) into numrows
    from cidades
    where
      new.fil_codigo = cidades.fil_codigo and
      new.cid_codigo = cidades.cid_codigo;
    tmp:=''cidades|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''cid_codigo='' || new.cid_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 cidades. 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_unidadesaude
after update on unidadesaude
for each row execute procedure fn_tu_unidadesaude();


CREATE TRIGGER conveniounidadesaude_log AFTER INSERT OR UPDATE OR DELETE ON public.conveniounidadesaude FOR EACH ROW EXECUTE PROCEDURE geralog();

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

--Caso a coluna abaixo já exista, comente a linha.
alter table conveniosintegracaooperadora add cio_pesquisarequisicao boolean;




