drop index xpklogemail;
drop index xif1logemail;
drop index xif2logemail;
drop index xif3logemail;

drop index xdataenvio;
drop index xdataenviosituacao;
drop index xif3logsms;
drop index xif2logsms;
drop index xif1logsms;
drop index xpklogsms;

alter table logemail drop constraint logemail_pkey;
alter table logsms drop constraint logsms_pkey;

alter table logemail
  add     ema_filial           varchar(1) not null default 'N';

create unique index xpklogemail on logemail
(
       fil_codigo,
       ema_codigo,
       ema_filial
);

create index xif1logemail on logemail
(
       fil_codigo
);

create index xif2logemail on logemail
(
       fil_codigo,
       req_codigo
);

create index xif3logemail on logemail
(
       fil_codigo,
       pac_codigo
);


alter table logemail
       add primary key (fil_codigo, ema_codigo, ema_filial);


alter table logids
add       ids_falha            boolean default false;

update logids set ids_falha = (position(upper('resultado importado') in upper(ids_mensagem)) > 0);


alter table logsms
 add      sms_filial           varchar(1) not null  default 'N'
;

create unique index xpklogsms on logsms
(
       fil_codigo,
       sms_codigo,
       sms_filial
);

create index xif1logsms on logsms
(
       fil_codigo
);

create index xif2logsms on logsms
(
       fil_codigo,
       pac_codigo
);

create index xif3logsms on logsms
(
       fil_codigo,
       req_codigo
);

create index xdataenvio on logsms
(
       sms_dataenvio
);

create index xdataenviosituacao on logsms
(
       sms_datahora,
       sms_situacao
);


alter table logsms
       add primary key (fil_codigo, sms_codigo, sms_filial);




drop function fn_ti_logemail() cascade;

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

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

    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 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_logemail
after insert on logemail
for each row execute procedure fn_ti_logemail();


drop function fn_tu_logemail() cascade;

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

  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 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_logemail
after update on logemail
for each row execute procedure fn_tu_logemail();


drop function fn_ti_logids() cascade;

create function fn_ti_logids() 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 (
      new.fil_codigo is not null and
      new.exa_codigo is not null and
      new.mco_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 examerequisicao. 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;


return new;
end;'
language 'plpgsql';
					
create trigger ti_logids
after insert on logids
for each row execute procedure fn_ti_logids();


drop function fn_tu_logids() cascade;

create function fn_tu_logids() 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 (
    new.fil_codigo is not null and
    new.exa_codigo is not null and
    new.mco_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 examerequisicao. 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;


return old;
end;'
language 'plpgsql';
					
create trigger tu_logids
after update on logids
for each row execute procedure fn_tu_logids();


drop function fn_ti_logsms() cascade;

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

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

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

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

    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_logsms
after insert on logsms
for each row execute procedure fn_ti_logsms();


drop function fn_tu_logsms() cascade;

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

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

  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_logsms
after update on logsms
for each row execute procedure fn_tu_logsms();




insert into atualizacoes(atu_nome) values ('v22010001_130122sql');

alter table servico add svc_tipo varchar(1) default 'A';



insert into atualizacoes(atu_nome) values ('v22010002_170122sql');


alter table convenios
    add   lae_codigo           integer;

create index xif225convenios on convenios
(
       fil_codigo,
       lae_codigo
);


drop function fn_td_convenios() cascade;

create function fn_td_convenios() returns opaque as '
declare
	numrows integer;										 
begin
    delete from acessowebconvenio
      where
        acessowebconvenio.fil_codigo = old.fil_codigo and
        acessowebconvenio.con_codigo = old.con_codigo;

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

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

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

  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_td_labexterno() cascade;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


drop function fn_ti_labexterno() cascade;

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

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

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

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

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

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

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

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

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

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


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


drop function fn_tu_labexterno() cascade;

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

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

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

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

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


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





insert into atualizacoes(atu_nome) values ('v22010003_280122sql');

