


alter table filiais_postocoleta add fil_padraoindicadores boolean default false;

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


alter table lanctocaixa add lcx_tipotransferencia varchar(10);

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


alter table examerequisicao add exr_transacaoidunimed varchar(12), add exr_idunimed varchar(12);

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

alter table examelayoutmetodornds
  add rnd_nota text,
  add rnd_metodo varchar(1000),
  add rnd_referencia text,
  add rnd_nomegal varchar(1000),
  add rnd_tipogal varchar(15);



create table tipogalrnds (
       tga_codigo           varchar(15) not null,
       tga_descricao        varchar(200)
);

create unique index xpktipogalrnds on tipogalrnds
(
       tga_codigo
);


alter table tipogalrnds
       add primary key (tga_codigo);


create table urlrnds (
       url_estado           varchar(2) not null,
       url_url              varchar(1000)
);

create unique index xpkurlrnds on urlrnds
(
       url_estado
);


alter table urlrnds
       add primary key (url_estado);



INSERT INTO urlrnds(url_estado, url_url) values('AC', 'https://ac-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('AL', 'https://al-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('AP', 'https://ap-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('AM', 'https://am-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('BA', 'https://ba-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('CE', 'https://ce-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('DF', 'https://df-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('ES', 'https://es-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('GO', 'https://go-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('MA', 'https://ma-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('MT', 'https://mt-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('MS', 'https://ms-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('MG', 'https://mg-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('PA', 'https://pa-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('PB', 'https://pb-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('PR', 'https://pr-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('PE', 'https://pe-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('PI', 'https://pi-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('RJ', 'https://rj-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('RN', 'https://rn-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('RS', 'https://rs-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('RO', 'https://ro-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('RR', 'https://rr-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('SC', 'https://sc-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('SP', 'https://sp-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('SE', 'https://se-ehr-services.saude.gov.br');
INSERT INTO urlrnds(url_estado, url_url) values('TO', 'https://to-ehr-services.saude.gov.br'); 

select configurageralog('urlrnds');
select configurageralog('tipogalrnds');

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



alter table material
    add   mat_calcrateiofreteultcompra numeric(15,6),
    add   nfi_codigoultcompra  integer,
    add   ped_codigoultcompra  integer,
    add   cen_codigoultcompra  integer;


create index xif226material on material
(
       fil_codigo,
       nfi_codigoultcompra
);

create index xif227material on material
(
       fil_codigo,
       ped_codigoultcompra
);

create index xif228material on material
(
       fil_codigo,
       cen_codigoultcompra
);



drop function fn_td_conferenciaentrada() cascade;

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

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

    delete from conferenciaentradamaterial
      where
        conferenciaentradamaterial.fil_codigo = old.fil_codigo and
        conferenciaentradamaterial.cen_codigo = old.cen_codigo;


return old;
end;'
language 'plpgsql';
					
create trigger td_conferenciaentrada
after delete on conferenciaentrada
for each row execute procedure fn_td_conferenciaentrada();


drop function fn_ti_conferenciaentrada() cascade;

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

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

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

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

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

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

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

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

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

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


return new;
end;'
language 'plpgsql';
					
create trigger ti_conferenciaentrada
after insert on conferenciaentrada
for each row execute procedure fn_ti_conferenciaentrada();


drop function fn_tu_conferenciaentrada() cascade;

create function fn_tu_conferenciaentrada() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.cen_codigo <> new.cen_codigo) then
    select count(*)
      from material
      where
        material.fil_codigo = old.fil_codigo and
        material.cen_codigoultcompra = old.cen_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela material.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.cen_codigo <> new.cen_codigo) then
    select count(*)
      from conferenciaentradalanctoestoque
      where
        conferenciaentradalanctoestoque.fil_codigo = old.fil_codigo and
        conferenciaentradalanctoestoque.cen_codigo = old.cen_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conferenciaentradalanctoestoque.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.cen_codigo <> new.cen_codigo) then
    select count(*)
      from conferenciaentradamaterial
      where
        conferenciaentradamaterial.fil_codigo = old.fil_codigo and
        conferenciaentradamaterial.cen_codigo = old.cen_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conferenciaentradamaterial.'';
    end if;
  end if;
  select count(*) into numrows
    from pedido
    where
      new.fil_codigo = pedido.fil_codigo and
      new.ped_codigo = pedido.ped_codigo;
    tmp:=''pedido|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''ped_codigo='' || new.ped_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.ped_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela pedido. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

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

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

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

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


return old;
end;'
language 'plpgsql';
					
create trigger tu_conferenciaentrada
after update on conferenciaentrada
for each row execute procedure fn_tu_conferenciaentrada();


drop function fn_td_material() cascade;

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

    delete from materialusuario
      where
        materialusuario.fil_codigo = old.fil_codigo and
        materialusuario.mat_codigo = old.mat_codigo;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


return old;
end;'
language 'plpgsql';
					
create trigger td_material
after delete on material
for each row execute procedure fn_td_material();


drop function fn_ti_material() cascade;

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

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

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

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

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

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

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

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

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

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

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

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

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

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


return new;
end;'
language 'plpgsql';
					
create trigger ti_material
after insert on material
for each row execute procedure fn_ti_material();


drop function fn_tu_material() cascade;

create function fn_tu_material() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from interfaceexamereagente
      where
        interfaceexamereagente.fil_codigo = old.fil_codigo and
        interfaceexamereagente.mat_codigo = old.mat_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.mat_codigo <> new.mat_codigo) then
    select count(*)
      from materialusuario
      where
        materialusuario.fil_codigo = old.fil_codigo and
        materialusuario.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialusuario.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from materialalternativo
      where
        materialalternativo.fil_codigo = old.fil_codigo and
        materialalternativo.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialalternativo.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from materiallote
      where
        materiallote.fil_codigo = old.fil_codigo and
        materiallote.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materiallote.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from materialenviadomaterial
      where
        materialenviadomaterial.fil_codigo = old.fil_codigo and
        materialenviadomaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialenviadomaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from materialidentificado
      where
        materialidentificado.fil_codigo = old.fil_codigo and
        materialidentificado.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialidentificado.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from montagemkitconsumido
      where
        montagemkitconsumido.fil_codigo = old.fil_codigo and
        montagemkitconsumido.mat_codconsumido = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela montagemkitconsumido.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from montagemkitmaterial
      where
        montagemkitmaterial.fil_codigo = old.fil_codigo and
        montagemkitmaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela montagemkitmaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from transfestoquematerial
      where
        transfestoquematerial.fil_codigo = old.fil_codigo and
        transfestoquematerial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela transfestoquematerial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from estoquemanualmaterial
      where
        estoquemanualmaterial.fil_codigo = old.fil_codigo and
        estoquemanualmaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela estoquemanualmaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from requisicaoestoquematerial
      where
        requisicaoestoquematerial.fil_codigo = old.fil_codigo and
        requisicaoestoquematerial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaoestoquematerial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from lanctoestoque
      where
        lanctoestoque.fil_codigo = old.fil_codigo and
        lanctoestoque.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela lanctoestoque.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from conferenciaestoquematerial
      where
        conferenciaestoquematerial.fil_codigo = old.fil_codigo and
        conferenciaestoquematerial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conferenciaestoquematerial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from conferenciaentradamaterial
      where
        conferenciaentradamaterial.fil_codigo = old.fil_codigo and
        conferenciaentradamaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conferenciaentradamaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from notafiscalmaterial
      where
        notafiscalmaterial.fil_codigo = old.fil_codigo and
        notafiscalmaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscalmaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from pedidomaterial
      where
        pedidomaterial.fil_codigo = old.fil_codigo and
        pedidomaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela pedidomaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from fichatecnicamaterial
      where
        fichatecnicamaterial.fil_codigo = old.fil_codigo and
        fichatecnicamaterial.mat_codigofilho = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela fichatecnicamaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from fichatecnicamaterial
      where
        fichatecnicamaterial.fil_codigo = old.fil_codigo and
        fichatecnicamaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela fichatecnicamaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from cotacaomaterial
      where
        cotacaomaterial.fil_codigo = old.fil_codigo and
        cotacaomaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela cotacaomaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from saldoestoquecelula
      where
        saldoestoquecelula.fil_codigo = old.fil_codigo and
        saldoestoquecelula.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela saldoestoquecelula.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from saldoestoque
      where
        saldoestoque.fil_codigo = old.fil_codigo and
        saldoestoque.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela saldoestoque.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from materialpatrimonio
      where
        materialpatrimonio.fil_codigo = old.fil_codigo and
        materialpatrimonio.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialpatrimonio.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from recipmaterial
      where
        recipmaterial.fil_codigo = old.fil_codigo and
        recipmaterial.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela recipmaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from materialexamerequis
      where
        materialexamerequis.fil_codigo = old.fil_codigo and
        materialexamerequis.mat_codigo = old.mat_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialexamerequis.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.mat_codigo <> new.mat_codigo) then
    select count(*)
      from materialexame
      where
        materialexame.fil_codigo = old.fil_codigo and
        materialexame.mat_codigo = old.mat_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;
  select count(*) into numrows
    from conferenciaentrada
    where
      new.fil_codigo = conferenciaentrada.fil_codigo and
      new.cen_codigoultcompra = conferenciaentrada.cen_codigo;
    tmp:=''conferenciaentrada|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''cen_codigo='' || new.cen_codigoultcompra || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.cen_codigoultcompra is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela conferenciaentrada. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

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

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

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

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

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

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


return old;
end;'
language 'plpgsql';
					
create trigger tu_material
after update on material
for each row execute procedure fn_tu_material();


drop function fn_td_notafiscal() cascade;

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

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

    delete from notafiscalstatusnfse
      where
        notafiscalstatusnfse.fil_codigo = old.fil_codigo and
        notafiscalstatusnfse.nfi_codigo = old.nfi_codigo;

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

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

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

    delete from notafiscalmaterial
      where
        notafiscalmaterial.fil_codigo = old.fil_codigo and
        notafiscalmaterial.nfi_codigo = old.nfi_codigo;

    delete from notafiscalcomposicao
      where
        notafiscalcomposicao.fil_codigo = old.fil_codigo and
        notafiscalcomposicao.nfi_kodigo = old.nfi_codigo;

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

    delete from faturanotafiscal
      where
        faturanotafiscal.fil_codigo = old.fil_codigo and
        faturanotafiscal.nfi_codigo = old.nfi_codigo;

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

    delete from notafiscalservico
      where
        notafiscalservico.fil_codigo = old.fil_codigo and
        notafiscalservico.nfi_codigo = old.nfi_codigo;


return old;
end;'
language 'plpgsql';
					
create trigger td_notafiscal
after delete on notafiscal
for each row execute procedure fn_td_notafiscal();


drop function fn_ti_notafiscal() cascade;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    select count(*) into numrows
      from series
      where
        new.fil_codigo = series.fil_codigo and
        new.ser_codigo = series.ser_codigo;
    tmp:=''series|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''ser_codigo='' || new.ser_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 series. 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_notafiscal
after insert on notafiscal
for each row execute procedure fn_ti_notafiscal();


drop function fn_tu_notafiscal() cascade;

create function fn_tu_notafiscal() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from material
      where
        material.fil_codigo = old.fil_codigo and
        material.nfi_codigoultcompra = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela material.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from notafiscallanctoestoque
      where
        notafiscallanctoestoque.fil_codigo = old.fil_codigo and
        notafiscallanctoestoque.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscallanctoestoque.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from notafiscalstatusnfse
      where
        notafiscalstatusnfse.fil_codigo = old.fil_codigo and
        notafiscalstatusnfse.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscalstatusnfse.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from requisicaonotafiscal
      where
        requisicaonotafiscal.fil_codigo = old.fil_codigo and
        requisicaonotafiscal.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela requisicaonotafiscal.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from notafiscalparcelas
      where
        notafiscalparcelas.fil_codigo = old.fil_codigo and
        notafiscalparcelas.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscalparcelas.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from conferenciaentrada
      where
        conferenciaentrada.fil_codigo = old.fil_codigo and
        conferenciaentrada.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conferenciaentrada.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from notafiscalmaterial
      where
        notafiscalmaterial.fil_codigo = old.fil_codigo and
        notafiscalmaterial.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscalmaterial.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from notafiscalcomposicao
      where
        notafiscalcomposicao.fil_codigo = old.fil_codigo and
        notafiscalcomposicao.nfi_kodigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscalcomposicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from notafiscalcomposicao
      where
        notafiscalcomposicao.fil_codigo = old.fil_codigo and
        notafiscalcomposicao.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscalcomposicao.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from faturanotafiscal
      where
        faturanotafiscal.fil_codigo = old.fil_codigo and
        faturanotafiscal.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela faturanotafiscal.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from receberpagar
      where
        receberpagar.fil_codigo = old.fil_codigo and
        receberpagar.nfi_codigo = old.nfi_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.nfi_codigo <> new.nfi_codigo) then
    select count(*)
      from notafiscalservico
      where
        notafiscalservico.fil_codigo = old.fil_codigo and
        notafiscalservico.nfi_codigo = old.nfi_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela notafiscalservico.'';
    end if;
  end if;
  select count(*) into numrows
    from usuario
    where
      new.usr_codautorizafinanceira = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codautorizafinanceira || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codautorizafinanceira 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 pedido
    where
      new.fil_codigo = pedido.fil_codigo and
      new.ped_codigo = pedido.ped_codigo;
    tmp:=''pedido|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''ped_codigo='' || new.ped_codigo || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.fil_codigo is not null and
    new.ped_codigo is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela pedido. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

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

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

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

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

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

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

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

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

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

  select count(*) into numrows
    from series
    where
      new.fil_codigo = series.fil_codigo and
      new.ser_codigo = series.ser_codigo;
    tmp:=''series|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''ser_codigo='' || new.ser_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 series. 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_notafiscal
after update on notafiscal
for each row execute procedure fn_tu_notafiscal();


drop function fn_td_pedido() cascade;

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

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

    delete from pedidoparcela
      where
        pedidoparcela.fil_codigo = old.fil_codigo and
        pedidoparcela.ped_codigo = old.ped_codigo;

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

    delete from pedidomaterial
      where
        pedidomaterial.fil_codigo = old.fil_codigo and
        pedidomaterial.ped_codigo = old.ped_codigo;


return old;
end;'
language 'plpgsql';
					
create trigger td_pedido
after delete on pedido
for each row execute procedure fn_td_pedido();


drop function fn_ti_pedido() cascade;

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

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

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

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

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

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

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

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

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

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

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

    select count(*) into numrows
      from 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_pedido
after insert on pedido
for each row execute procedure fn_ti_pedido();


drop function fn_tu_pedido() cascade;

create function fn_tu_pedido() returns opaque as '
declare
	numrows integer;
        tmp varchar;										 
begin
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.ped_codigo <> new.ped_codigo) then
    select count(*)
      from material
      where
        material.fil_codigo = old.fil_codigo and
        material.ped_codigoultcompra = old.ped_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela material.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.ped_codigo <> new.ped_codigo) then
    select count(*)
      from pedidolanctoestoque
      where
        pedidolanctoestoque.fil_codigo = old.fil_codigo and
        pedidolanctoestoque.ped_codigo = old.ped_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela pedidolanctoestoque.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.ped_codigo <> new.ped_codigo) then
    select count(*)
      from pedidoparcela
      where
        pedidoparcela.fil_codigo = old.fil_codigo and
        pedidoparcela.ped_codigo = old.ped_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela pedidoparcela.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.ped_codigo <> new.ped_codigo) then
    select count(*)
      from notafiscal
      where
        notafiscal.fil_codigo = old.fil_codigo and
        notafiscal.ped_codigo = old.ped_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.ped_codigo <> new.ped_codigo) then
    select count(*)
      from conferenciaentrada
      where
        conferenciaentrada.fil_codigo = old.fil_codigo and
        conferenciaentrada.ped_codigo = old.ped_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela conferenciaentrada.'';
    end if;
  end if;
  if
    (old.fil_codigo <> new.fil_codigo or 
     old.ped_codigo <> new.ped_codigo) then
    select count(*)
      from pedidomaterial
      where
        pedidomaterial.fil_codigo = old.fil_codigo and
        pedidomaterial.ped_codigo = old.ped_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela pedidomaterial.'';
    end if;
  end if;
  select count(*) into numrows
    from usuario
    where
      new.usr_codexclusao = usuario.usr_codigo;
    tmp:=''usuario|'';
    
      tmp:=tmp || ''usr_codigo='' || new.usr_codexclusao || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);
  if (
    new.usr_codexclusao is not null and
    numrows = 0
  ) then
    raise exception ''o registro nao pode ser alterado, pois um valor nao existe na tabela usuario. chave para consulta:[%]'',tmp using errcode=upper(''ufkne'');
  end if;

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

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

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

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

  select count(*) into numrows
    from 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_pedido
after update on pedido
for each row execute procedure fn_tu_pedido();





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


alter table filiais_postocoleta
  add fil_certificadornds text,
  add fil_senhacertificadornds varchar(100),
  add fil_cpfrnds varchar(18),
  add fil_validadecertificadornds date,
  add fil_idrnds varchar(20);

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



create table examerequisicaohistoricornds (
       fil_codigo           integer not null,
       exa_codigo           varchar(5) not null,
       mco_codigo           integer not null,
       req_codigo           integer not null,
       hrn_codigo           serial not null,
       hrn_datahora         timestamp,
       hrn_situacao         varchar(1),
       hrn_mensagem         varchar(3000)
);

create unique index xpkexamerequisicaohistoricornds on examerequisicaohistoricornds
(
       fil_codigo,
       exa_codigo,
       mco_codigo,
       req_codigo,
       hrn_codigo
);

create index xif1examerequisicaohistoricornd on examerequisicaohistoricornds
(
       fil_codigo,
       exa_codigo,
       mco_codigo,
       req_codigo
);


alter table examerequisicaohistoricornds
       add primary key (fil_codigo, exa_codigo, mco_codigo, 
              req_codigo, hrn_codigo);



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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


return old;

end'
language 'plpgsql';



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

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

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

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

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

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

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

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

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

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

select count(*) into numrows
      from examematcoleta
      where
        new.fil_codigo = examematcoleta.fil_codigo and
        new.exa_codigopai = examematcoleta.exa_codigo and
        new.mco_codigopai = examematcoleta.mco_codigo;
    tmp:=''examematcoleta|'';
    
      tmp:=tmp || ''fil_codigo='' || new.fil_codigo || ''|'';
    
      tmp:=tmp || ''exa_codigo='' || new.exa_codigopai || ''|'';
    
      tmp:=tmp || ''mco_codigo='' || new.mco_codigopai || ''|'';
    
    tmp:=substring(tmp,1,length(tmp)-1);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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





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

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

return new;

end'
language 'plpgsql';



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




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

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


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

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


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

return new;

end'
language 'plpgsql';



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










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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaohistoricornds
      where
        examerequisicaohistoricornds.fil_codigo = old.fil_codigo and
        examerequisicaohistoricornds.exa_codigo = old.exa_codigo and
        examerequisicaohistoricornds.mco_codigo = old.mco_codigo and
        examerequisicaohistoricornds.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaohistoricornds.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from integracaosaveexamerequisicao
      where
        integracaosaveexamerequisicao.fil_kodigo = old.fil_codigo and
        integracaosaveexamerequisicao.exa_codigo = old.exa_codigo and
        integracaosaveexamerequisicao.mco_codigo = old.mco_codigo and
        integracaosaveexamerequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela integracaosaveexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaohistoricoentrega
      where
        examerequisicaohistoricoentrega.fil_codigo = old.fil_codigo and
        examerequisicaohistoricoentrega.exa_codigo = old.exa_codigo and
        examerequisicaohistoricoentrega.mco_codigo = old.mco_codigo and
        examerequisicaohistoricoentrega.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaohistoricoentrega.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from agendamentoexamerequisicao
      where
        agendamentoexamerequisicao.fil_codigo = old.fil_codigo and
        agendamentoexamerequisicao.exa_codigo = old.exa_codigo and
        agendamentoexamerequisicao.mco_codigo = old.mco_codigo and
        agendamentoexamerequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela agendamentoexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from exportaintegracaohospital
      where
        exportaintegracaohospital.fil_codigo = old.fil_codigo and
        exportaintegracaohospital.exa_codigo = old.exa_codigo and
        exportaintegracaohospital.mco_codigo = old.mco_codigo and
        exportaintegracaohospital.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela exportaintegracaohospital.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from logids
      where
        logids.fil_codigo = old.fil_codigo and
        logids.exa_codigo = old.exa_codigo and
        logids.mco_codigo = old.mco_codigo and
        logids.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela logids.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaohistoricosetor
      where
        examerequisicaohistoricosetor.fil_codigo = old.fil_codigo and
        examerequisicaohistoricosetor.exa_codigo = old.exa_codigo and
        examerequisicaohistoricosetor.mco_codigo = old.mco_codigo and
        examerequisicaohistoricosetor.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaohistoricosetor.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoetiquetas
      where
        examerequisicaoetiquetas.fil_codigo = old.fil_codigo and
        examerequisicaoetiquetas.exa_codigo = old.exa_codigo and
        examerequisicaoetiquetas.mco_codigo = old.mco_codigo and
        examerequisicaoetiquetas.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaoetiquetas.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoemailatraso
      where
        examerequisicaoemailatraso.fil_codigo = old.fil_codigo and
        examerequisicaoemailatraso.exa_codigo = old.exa_codigo and
        examerequisicaoemailatraso.mco_codigo = old.mco_codigo and
        examerequisicaoemailatraso.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaoemailatraso.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaodadosbrutos
      where
        examerequisicaodadosbrutos.fil_codigo = old.fil_codigo and
        examerequisicaodadosbrutos.exa_codigo = old.exa_codigo and
        examerequisicaodadosbrutos.mco_codigo = old.mco_codigo and
        examerequisicaodadosbrutos.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaodadosbrutos.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoincerteza
      where
        examerequisicaoincerteza.fil_codigo = old.fil_codigo and
        examerequisicaoincerteza.exa_codigo = old.exa_codigo and
        examerequisicaoincerteza.mco_codigo = old.mco_codigo and
        examerequisicaoincerteza.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaoincerteza.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from lotefilialexamerequisicao
      where
        lotefilialexamerequisicao.fil_codigo = old.fil_codigo and
        lotefilialexamerequisicao.exa_codigo = old.exa_codigo and
        lotefilialexamerequisicao.mco_codigo = old.mco_codigo and
        lotefilialexamerequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela lotefilialexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoresultado
      where
        examerequisicaoresultado.fil_codigo = old.fil_codigo and
        examerequisicaoresultado.exa_codigo = old.exa_codigo and
        examerequisicaoresultado.mco_codigo = old.mco_codigo and
        examerequisicaoresultado.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaoresultado.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaolaminas
      where
        examerequisicaolaminas.fil_codigo = old.fil_codigo and
        examerequisicaolaminas.exa_codigo = old.exa_codigo and
        examerequisicaolaminas.mco_codigo = old.mco_codigo and
        examerequisicaolaminas.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaolaminas.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaohash
      where
        examerequisicaohash.fil_codigo = old.fil_codigo and
        examerequisicaohash.exa_codigo = old.exa_codigo and
        examerequisicaohash.mco_codigo = old.mco_codigo and
        examerequisicaohash.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaohash.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaotrocas
      where
        examerequisicaotrocas.fil_codigo = old.fil_codigo and
        examerequisicaotrocas.exa_codigo = old.exa_codigo and
        examerequisicaotrocas.mco_codigo = old.mco_codigo and
        examerequisicaotrocas.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaotrocas.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaohistoricolaudo
      where
        examerequisicaohistoricolaudo.fil_codigo = old.fil_codigo and
        examerequisicaohistoricolaudo.exa_codigo = old.exa_codigo and
        examerequisicaohistoricolaudo.mco_codigo = old.mco_codigo and
        examerequisicaohistoricolaudo.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaohistoricolaudo.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaosetor
      where
        examerequisicaosetor.fil_codigo = old.fil_codigo and
        examerequisicaosetor.exa_codigo = old.exa_codigo and
        examerequisicaosetor.mco_codigo = old.mco_codigo and
        examerequisicaosetor.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaosetor.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaoguiaagrupada
      where
        examerequisicaoguiaagrupada.fil_codigo = old.fil_codigo and
        examerequisicaoguiaagrupada.exa_codigo = old.exa_codigo and
        examerequisicaoguiaagrupada.mco_codigo = old.mco_codigo and
        examerequisicaoguiaagrupada.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaoguiaagrupada.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaosituacoes
      where
        examerequisicaosituacoes.fil_codigo = old.fil_codigo and
        examerequisicaosituacoes.exa_codigo = old.exa_codigo and
        examerequisicaosituacoes.mco_codigo = old.mco_codigo and
        examerequisicaosituacoes.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaosituacoes.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from loteexternoexamerequisicao
      where
        loteexternoexamerequisicao.fil_kodigo = old.fil_codigo and
        loteexternoexamerequisicao.exa_codigo = old.exa_codigo and
        loteexternoexamerequisicao.mco_codigo = old.mco_codigo and
        loteexternoexamerequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela loteexternoexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from examerequisicaorecipiente
      where
        examerequisicaorecipiente.fil_codigo = old.fil_codigo and
        examerequisicaorecipiente.exa_codigo = old.exa_codigo and
        examerequisicaorecipiente.mco_codigo = old.mco_codigo and
        examerequisicaorecipiente.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela examerequisicaorecipiente.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from faturaexamerequisicao
      where
        faturaexamerequisicao.fil_kodigo = old.fil_codigo and
        faturaexamerequisicao.exa_codigo = old.exa_codigo and
        faturaexamerequisicao.mco_codigo = old.mco_codigo and
        faturaexamerequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela faturaexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from interfaceexamerequisicao
      where
        interfaceexamerequisicao.fil_codigo = old.fil_codigo and
        interfaceexamerequisicao.exa_codigo = old.exa_codigo and
        interfaceexamerequisicao.mco_codigo = old.mco_codigo and
        interfaceexamerequisicao.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela interfaceexamerequisicao.'';
    end if;
  end if;
if
    (old.fil_codigo <> new.fil_codigo or 
     old.exa_codigo <> new.exa_codigo or 
     old.mco_codigo <> new.mco_codigo or 
     old.req_codigo <> new.req_codigo) then
    select count(*)
      from materialexamerequis
      where
        materialexamerequis.fil_codigo = old.fil_codigo and
        materialexamerequis.exa_codigo = old.exa_codigo and
        materialexamerequis.mco_codigo = old.mco_codigo and
        materialexamerequis.req_codigo = old.req_codigo into numrows;
    if (numrows > 0) then
     raise exception ''o registro nao pode ser alterado, pois um valor esta sendo utilizado na tabela materialexamerequis.'';
    end if;
  end if;


return new;

end'
language 'plpgsql';



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




--drop function fn_ti_examerequisicaohistoricornds() cascade;

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

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


return new;
end;'
language 'plpgsql';
					
create trigger ti_examerequisicaohistoricornds
after insert on examerequisicaohistoricornds
for each row execute procedure fn_ti_examerequisicaohistoricornds();


--drop function fn_tu_examerequisicaohistoricornds() cascade;

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


return old;
end;'
language 'plpgsql';
					
create trigger tu_examerequisicaohistoricornds
after update on examerequisicaohistoricornds
for each row execute procedure fn_tu_examerequisicaohistoricornds();

select configurageralog('examerequisicaohistoricornds');


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


alter table configuracaoweb add cwe_apelidosituacao text;

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


alter table labexterno add lae_ignorarcopiaconfiguracao boolean default false;

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


alter table layout add lay_tiponotificacao varchar(1), add lay_notificacao text;
alter table exames add exa_cabecalhonotificacao text, add exa_corponotificacao text;

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


