alter table notafiscal alter nfi_protocolonfse type varchar(50);

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


drop function fn_td_examematcoleta() cascade;

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

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

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

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

    delete from exportaintegracaooperadora
      where
        exportaintegracaooperadora.fil_codigo = old.fil_codigo and
        exportaintegracaooperadora.exa_codigo = old.exa_codigo and
        exportaintegracaooperadora.mco_codigo = old.mco_codigo;

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

    delete from examecorrelacaoconferencia
      where
        examecorrelacaoconferencia.fil_codigo = old.fil_codigo and
        examecorrelacaoconferencia.exa_codigo = old.exa_codigo and
        examecorrelacaoconferencia.mco_codigo = old.mco_codigo;

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

    select count(*) into numrows
      from conveniocotaexame
      where
        conveniocotaexame.fil_codigo = old.fil_codigo and
        conveniocotaexame.exa_codigo = old.exa_codigo and
        conveniocotaexame.mco_codigo = old.mco_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 examerequisicao
      where
        examerequisicao.fil_codigo = old.fil_codigo and
        examerequisicao.exa_codigopai = old.exa_codigo and
        examerequisicao.mco_codigopai = old.mco_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela examerequisicao.'';
    end if;

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

    delete from detalhetabelaprecometodologia
      where
        detalhetabelaprecometodologia.fil_codigo = old.fil_codigo and
        detalhetabelaprecometodologia.exa_codigo = old.exa_codigo and
        detalhetabelaprecometodologia.mco_codigo = old.mco_codigo;

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

    select count(*) into numrows
      from examematcoletalabexterno
      where
        examematcoletalabexterno.fil_codigo = old.fil_codigo and
        examematcoletalabexterno.exa_codigo = old.exa_codigo and
        examematcoletalabexterno.mco_codigo = old.mco_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 contrassenharequisicaoexame
      where
        contrassenharequisicaoexame.fil_codigo = old.fil_codigo and
        contrassenharequisicaoexame.exa_codigo = old.exa_codigo and
        contrassenharequisicaoexame.mco_codigo = old.mco_codigo;
    if (numrows > 0) then
      raise exception ''o registro nao pode ser excluido, por estar sendo utilizado na tabela contrassenharequisicaoexame.'';
    end if;

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

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

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

    delete from examematcoletaitemplanilha
      where
        examematcoletaitemplanilha.fil_codigo = old.fil_codigo and
        examematcoletaitemplanilha.exa_codigo = old.exa_codigo and
        examematcoletaitemplanilha.mco_codigo = old.mco_codigo;

    delete from examematgrupo
      where
        examematgrupo.fil_codigo = old.fil_codigo and
        examematgrupo.exa_codigo = old.exa_codigo and
        examematgrupo.mco_codigo = old.mco_codigo;

    delete from examematconvenioprazo
      where
        examematconvenioprazo.fil_codigo = old.fil_codigo and
        examematconvenioprazo.exa_codigo = old.exa_codigo and
        examematconvenioprazo.mco_codigo = old.mco_codigo;

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

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

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

    delete from agrupaexameconvenio
      where
        agrupaexameconvenio.fil_codigo = old.fil_codigo and
        agrupaexameconvenio.exa_codigo = old.exa_codigo and
        agrupaexameconvenio.mco_codigo = old.mco_codigo;

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

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

    delete from examescontrole
      where
        examescontrole.fil_codigo = old.fil_codigo and
        examescontrole.exa_codigo = old.exa_codigo and
        examescontrole.mco_codigo = old.mco_codigo;

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

    delete from examematinterface
      where
        examematinterface.fil_codigo = old.fil_codigo and
        examematinterface.exa_codigo = old.exa_codigo and
        examematinterface.mco_codigo = old.mco_codigo;

    delete from examesprincipios
      where
        examesprincipios.fil_codigo = old.fil_codigo and
        examesprincipios.exa_codigo = old.exa_codigo and
        examesprincipios.mco_codigo = old.mco_codigo;

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

    delete from examesmatconvenio
      where
        examesmatconvenio.fil_codigo = old.fil_codigo and
        examesmatconvenio.exa_codigo = old.exa_codigo and
        examesmatconvenio.mco_codigo = old.mco_codigo;

    delete from detalhetabelapreco
      where
        detalhetabelapreco.fil_codigo = old.fil_codigo and
        detalhetabelapreco.exa_codigo = old.exa_codigo and
        detalhetabelapreco.mco_codigo = old.mco_codigo;

    delete from materialexame
      where
        materialexame.fil_codigo = old.fil_codigo and
        materialexame.exa_codigo = old.exa_codigo and
        materialexame.mco_codigo = old.mco_codigo;

    delete from reciptriagem
      where
        reciptriagem.fil_codigo = old.fil_codigo and
        reciptriagem.exa_codigo = old.exa_codigo and
        reciptriagem.mco_codigo = old.mco_codigo;

    delete from examelayout
      where
        examelayout.fil_codigo = old.fil_codigo and
        examelayout.exa_codigo = old.exa_codigo and
        examelayout.mco_codigo = old.mco_codigo;

    delete from recipcoleta
      where
        recipcoleta.fil_codigo = old.fil_codigo and
        recipcoleta.exa_codigo = old.exa_codigo and
        recipcoleta.mco_codigo = old.mco_codigo;


return old;
end;'
language 'plpgsql';
					
create trigger td_examematcoleta
after delete on examematcoleta
for each row execute procedure fn_td_examematcoleta();


drop function fn_ti_examematcoleta() cascade;

create function fn_ti_examematcoleta() returns opaque as '
declare
	numrows integer;
	tmp varchar;									 
begin
    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 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 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 (
      
      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 exames
      where
        new.fil_codigo = exames.fil_codigo and
        new.exa_codigo = exames.exa_codigo;
    tmp:=''exames|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_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 exames. chave para consulta:[%]'',tmp using errcode=upper(''ifkne'');
    end if;


return new;
end;'
language 'plpgsql';
					
create trigger ti_examematcoleta
after insert on examematcoleta
for each row execute procedure fn_ti_examematcoleta();


drop function fn_tu_examematcoleta() cascade;

create function fn_tu_examematcoleta() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from examematcoletahospital
      where
        examematcoletahospital.fil_codigo = old.fil_codigo and
        examematcoletahospital.exa_codigo = old.exa_codigo and
        examematcoletahospital.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematcoletahospital.'';
    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) then
    select count(*)
      from interfaceexamereagente
      where
        interfaceexamereagente.fil_codigo = old.fil_codigo and
        interfaceexamereagente.exa_codigo = old.exa_codigo and
        interfaceexamereagente.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela interfaceexamereagente.'';
    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) then
    select count(*)
      from conveniosintegracaooperadora
      where
        conveniosintegracaooperadora.fil_codigo = old.fil_codigo and
        conveniosintegracaooperadora.exa_kodigo = old.exa_codigo and
        conveniosintegracaooperadora.mco_kodigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from conveniosintegracaooperadora
      where
        conveniosintegracaooperadora.fil_codigo = old.fil_codigo and
        conveniosintegracaooperadora.exa_codigo = old.exa_codigo and
        conveniosintegracaooperadora.mco_codigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from exportaintegracaooperadora
      where
        exportaintegracaooperadora.fil_codigo = old.fil_codigo and
        exportaintegracaooperadora.exa_codigo = old.exa_codigo and
        exportaintegracaooperadora.mco_codigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from examecorrelacaoconferencia
      where
        examecorrelacaoconferencia.fil_codigo = old.fil_codigo and
        examecorrelacaoconferencia.exa_kodigo = old.exa_codigo and
        examecorrelacaoconferencia.mco_kodigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examecorrelacaoconferencia.'';
    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) then
    select count(*)
      from examecorrelacaoconferencia
      where
        examecorrelacaoconferencia.fil_codigo = old.fil_codigo and
        examecorrelacaoconferencia.exa_codigo = old.exa_codigo and
        examecorrelacaoconferencia.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examecorrelacaoconferencia.'';
    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) then
    select count(*)
      from loteexternoexamerequisicaodesm
      where
        loteexternoexamerequisicaodesm.fil_codigo = old.fil_codigo and
        loteexternoexamerequisicaodesm.exa_kodigo = old.exa_codigo and
        loteexternoexamerequisicaodesm.mco_kodigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela loteexternoexamerequisicaodesm.'';
    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) then
    select count(*)
      from conveniocotaexame
      where
        conveniocotaexame.fil_codigo = old.fil_codigo and
        conveniocotaexame.exa_codigo = old.exa_codigo and
        conveniocotaexame.mco_codigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from examerequisicao
      where
        examerequisicao.fil_codigo = old.fil_codigo and
        examerequisicao.exa_codigopai = old.exa_codigo and
        examerequisicao.mco_codigopai = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from examematcoletataxa
      where
        examematcoletataxa.fil_codigo = old.fil_codigo and
        examematcoletataxa.exa_codigo = old.exa_codigo and
        examematcoletataxa.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematcoletataxa.'';
    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) then
    select count(*)
      from detalhetabelaprecometodologia
      where
        detalhetabelaprecometodologia.fil_codigo = old.fil_codigo and
        detalhetabelaprecometodologia.exa_codigo = old.exa_codigo and
        detalhetabelaprecometodologia.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela detalhetabelaprecometodologia.'';
    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) then
    select count(*)
      from examerequisicaoweb
      where
        examerequisicaoweb.fil_codigo = old.fil_codigo and
        examerequisicaoweb.exa_codigo = old.exa_codigo and
        examerequisicaoweb.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaoweb.'';
    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) then
    select count(*)
      from examematcoletalabexterno
      where
        examematcoletalabexterno.fil_codigo = old.fil_codigo and
        examematcoletalabexterno.exa_codigo = old.exa_codigo and
        examematcoletalabexterno.mco_codigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from contrassenharequisicaoexame
      where
        contrassenharequisicaoexame.fil_codigo = old.fil_codigo and
        contrassenharequisicaoexame.exa_codigo = old.exa_codigo and
        contrassenharequisicaoexame.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela contrassenharequisicaoexame.'';
    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) then
    select count(*)
      from examerequisicaoguiaagrupada
      where
        examerequisicaoguiaagrupada.fil_codigo = old.fil_codigo and
        examerequisicaoguiaagrupada.exa_codfilho = old.exa_codigo and
        examerequisicaoguiaagrupada.mco_codfilho = old.mco_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) then
    select count(*)
      from conveniospreco
      where
        conveniospreco.fil_codigo = old.fil_codigo and
        conveniospreco.exa_codigo = old.exa_codigo and
        conveniospreco.mco_codigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from orcamentoconvenioexame
      where
        orcamentoconvenioexame.fil_codigo = old.fil_codigo and
        orcamentoconvenioexame.exa_codigo = old.exa_codigo and
        orcamentoconvenioexame.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela orcamentoconvenioexame.'';
    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) then
    select count(*)
      from examematcoletaitemplanilha
      where
        examematcoletaitemplanilha.fil_codigo = old.fil_codigo and
        examematcoletaitemplanilha.exa_codigo = old.exa_codigo and
        examematcoletaitemplanilha.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematcoletaitemplanilha.'';
    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) then
    select count(*)
      from examematgrupo
      where
        examematgrupo.fil_codigo = old.fil_codigo and
        examematgrupo.exa_codigo = old.exa_codigo and
        examematgrupo.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematgrupo.'';
    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) then
    select count(*)
      from examematconvenioprazo
      where
        examematconvenioprazo.fil_codigo = old.fil_codigo and
        examematconvenioprazo.exa_codigo = old.exa_codigo and
        examematconvenioprazo.mco_codigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from faturaexamerequisicao
      where
        faturaexamerequisicao.fil_codigo = old.fil_codigo and
        faturaexamerequisicao.exa_codfilho = old.exa_codigo and
        faturaexamerequisicao.mco_codfilho = old.mco_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) then
    select count(*)
      from exameagrupasituacao
      where
        exameagrupasituacao.fil_codigo = old.fil_codigo and
        exameagrupasituacao.exa_codigo = old.exa_codigo and
        exameagrupasituacao.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela exameagrupasituacao.'';
    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) then
    select count(*)
      from exameagrupaexameconvenio
      where
        exameagrupaexameconvenio.fil_codigo = old.fil_codigo and
        exameagrupaexameconvenio.exa_kodigo = old.exa_codigo and
        exameagrupaexameconvenio.mco_kodigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela exameagrupaexameconvenio.'';
    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) then
    select count(*)
      from agrupaexameconvenio
      where
        agrupaexameconvenio.fil_codigo = old.fil_codigo and
        agrupaexameconvenio.exa_codigo = old.exa_codigo and
        agrupaexameconvenio.mco_codigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from interfaceexamerequisicaodesm
      where
        interfaceexamerequisicaodesm.fil_codigo = old.fil_codigo and
        interfaceexamerequisicaodesm.exa_kodigo = old.exa_codigo and
        interfaceexamerequisicaodesm.mco_kodigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela interfaceexamerequisicaodesm.'';
    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) then
    select count(*)
      from interfaceexmreqsimplesdesm
      where
        interfaceexmreqsimplesdesm.fil_codigo = old.fil_codigo and
        interfaceexmreqsimplesdesm.exa_kodigo = old.exa_codigo and
        interfaceexmreqsimplesdesm.mco_kodigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela interfaceexmreqsimplesdesm.'';
    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) then
    select count(*)
      from examescontrole
      where
        examescontrole.fil_codigo = old.fil_codigo and
        examescontrole.exa_codigo = old.exa_codigo and
        examescontrole.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examescontrole.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from examematintdesmembrar
      where
        examematintdesmembrar.fil_codigo = old.fil_codigo and
        examematintdesmembrar.exa_kodigo = old.exa_codigo and
        examematintdesmembrar.mco_kodigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematintdesmembrar.'';
    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) then
    select count(*)
      from examematinterface
      where
        examematinterface.fil_codigo = old.fil_codigo and
        examematinterface.exa_codigo = old.exa_codigo and
        examematinterface.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examematinterface.'';
    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) then
    select count(*)
      from examesprincipios
      where
        examesprincipios.fil_codigo = old.fil_codigo and
        examesprincipios.exa_codigo = old.exa_codigo and
        examesprincipios.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examesprincipios.'';
    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) then
    select count(*)
      from examerequisicao
      where
        examerequisicao.fil_codigo = old.fil_codigo and
        examerequisicao.exa_codigo = old.exa_codigo and
        examerequisicao.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from examesmatconvenio
      where
        examesmatconvenio.fil_codigo = old.fil_codigo and
        examesmatconvenio.exa_codigo = old.exa_codigo and
        examesmatconvenio.mco_codigo = old.mco_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.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo) then
    select count(*)
      from detalhetabelapreco
      where
        detalhetabelapreco.fil_codigo = old.fil_codigo and
        detalhetabelapreco.exa_codigo = old.exa_codigo and
        detalhetabelapreco.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela detalhetabelapreco.'';
    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) then
    select count(*)
      from materialexame
      where
        materialexame.fil_codigo = old.fil_codigo and
        materialexame.exa_codigo = old.exa_codigo and
        materialexame.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialexame.'';
    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) then
    select count(*)
      from reciptriagem
      where
        reciptriagem.fil_codigo = old.fil_codigo and
        reciptriagem.exa_codigo = old.exa_codigo and
        reciptriagem.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela reciptriagem.'';
    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) then
    select count(*)
      from examelayout
      where
        examelayout.fil_codigo = old.fil_codigo and
        examelayout.exa_codigo = old.exa_codigo and
        examelayout.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examelayout.'';
    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) then
    select count(*)
      from recipcoleta
      where
        recipcoleta.fil_codigo = old.fil_codigo and
        recipcoleta.exa_codigo = old.exa_codigo and
        recipcoleta.mco_codigo = old.mco_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela recipcoleta.'';
    end if;
  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 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 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 (
    
    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 exames
    where
      new.fil_codigo = exames.fil_codigo and
      new.exa_codigo = exames.exa_codigo;
    tmp:=''exames|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_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 exames. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;


return old;
end;'
language 'plpgsql';
					
create trigger tu_examematcoleta
after update on examematcoleta
for each row execute procedure fn_tu_examematcoleta();


drop function fn_td_examematcoletahospital() cascade;

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


return old;
end;'
language 'plpgsql';
					
create trigger td_examematcoletahospital
after delete on examematcoletahospital
for each row execute procedure fn_td_examematcoletahospital();


drop function fn_ti_examematcoletahospital() cascade;

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


return new;
end;'
language 'plpgsql';
					
create trigger ti_examematcoletahospital
after insert on examematcoletahospital
for each row execute procedure fn_ti_examematcoletahospital();


drop function fn_tu_examematcoletahospital() cascade;

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


return old;
end;'
language 'plpgsql';
					
create trigger tu_examematcoletahospital
after update on examematcoletahospital
for each row execute procedure fn_tu_examematcoletahospital();




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




alter table paciente add pac_passaporte varchar(20);


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


