set session_replication_role=replica;

alter table exames
  add exa_proibidowebpaciente boolean DEFAULT false,
  add exa_proibidowebconvenio boolean DEFAULT false,
  add exa_proibidowebmedico boolean DEFAULT false,
  add exa_proibidowebdestino boolean DEFAULT false,
  add exa_proibidowebfiscal boolean DEFAULT false,
  add exa_proibidowebresponsavel boolean DEFAULT false;


CREATE OR REPLACE FUNCTION alterarproibido() RETURNS integer AS $$
declare
  r record;
  cont integer;
BEGIN
	cont := 0;
	for r in select fil_codigo, exa_codigo, exa_proibidoweb from exames 
	loop
		case r.exa_proibidoweb 
			when 1 then update exames set exa_proibidowebpaciente = true where fil_codigo = r.fil_codigo and exa_codigo = r.exa_codigo;
			when 3 then update exames set exa_proibidowebmedico = true where fil_codigo = r.fil_codigo and exa_codigo = r.exa_codigo;
			when 5 then update exames set exa_proibidowebconvenio = true where fil_codigo = r.fil_codigo and exa_codigo = r.exa_codigo;
			when 1 + 3 then update exames set exa_proibidowebmedico = true, exa_proibidowebpaciente = true where fil_codigo = r.fil_codigo and exa_codigo = r.exa_codigo;
			when 1 + 5 then update exames set exa_proibidowebconvenio = true, exa_proibidowebpaciente = true where fil_codigo = r.fil_codigo and exa_codigo = r.exa_codigo;
			when 3 + 5 then update exames set exa_proibidowebmedico = true, exa_proibidowebconvenio = true where fil_codigo = r.fil_codigo and exa_codigo = r.exa_codigo;
			when 1 + 3 + 5 then update exames set exa_proibidowebpaciente = true, exa_proibidowebmedico = true, exa_proibidowebconvenio = true where fil_codigo = r.fil_codigo and exa_codigo = r.exa_codigo;
		else
		end case;
		cont := cont + 1;
	end loop;
	return cont;
END;
$$ LANGUAGE plpgsql;

select alterarproibido();

drop function alterarproibido();

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

set session_replication_role=replica;

alter table filiais_postocoleta add fil_webstandalone boolean default false;

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


create table examessaomarcos (
       fil_codigo           integer not null,
       lae_codigo           integer not null,
       sma_codexame         varchar(15) not null,
       sma_codmaterial      varchar(15) not null,
       sma_descricaoexame   varchar(100),
       sma_descricaomaterial varchar(100),
       sma_xml              text
);

create unique index xpkexamessaomarcos on examessaomarcos
(
       fil_codigo,
       lae_codigo,
       sma_codexame,
       sma_codmaterial
);

create index xif1examessaomarcos on examessaomarcos
(
       fil_codigo,
       lae_codigo
);


alter table examessaomarcos
       add primary key (fil_codigo, lae_codigo, sma_codexame, 
              sma_codmaterial);


--drop function fn_ti_examessaomarcos() cascade;

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

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


return new;
end;'
language 'plpgsql';
					
create trigger ti_examessaomarcos
after insert on examessaomarcos
for each row execute procedure fn_ti_examessaomarcos();


--drop function fn_tu_examessaomarcos() cascade;

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


return old;
end;'
language 'plpgsql';
					
create trigger tu_examessaomarcos
after update on examessaomarcos
for each row execute procedure fn_tu_examessaomarcos();


drop function fn_td_labexterno() cascade;

create function fn_td_labexterno() returns opaque as '
declare
	numrows integer;										 
begin
    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 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 ('v19010003_220119.sql');

alter table configuracaoweb add cwe_apresentardadosbrutos varchar(7) default '000000', add cwe_examesdadosbrutos varchar(5000);



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

alter table configuracaoweb add cwe_hintdadosbrutos varchar(100);



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