[firebase-br] Erro ao criar SP no Firebird 2.5

Hélio Oliveira hpensador em gmail.com
Qua Maio 16 22:58:14 -03 2012


Boa noite Colegas!

Tenho um banco de dados do Firebird 2.0 que estou tentando recriar o 
mesmo no Firebird 2.5 (extrair o metadata no IBExpert), porém durante o 
processo esta ocorrendo alguns erros na criação de algumas Storeds 
Procedures vide exemplo abaixo:

*This operation is not defined for system tables. unsuccessful metadata 
update.STORE RDB$PROCEDURES failed.* - Esta é a mensagem de erro 
apresentanda.

Obs.: Esta mesma SP esta funcionando normalmente no FB 2.0.

CREATE OR ALTER PROCEDURE CAGED (
     MES INTEGER,
     ANO INTEGER)
RETURNS (
     AUTORIZACAO VARCHAR(7),
     AUT_NOME VARCHAR(35),
     AUT_CNPJ VARCHAR(14),
     AUT_ENDERECO VARCHAR(35),
     AUT_CEP VARCHAR(8),
     AUT_UF VARCHAR(2),
     AUT_DDD VARCHAR(4),
     AUT_TELEFONE VARCHAR(8),
     AUT_RAMAL VARCHAR(5),
     AUT_TOTAL_MOVIMENTACOES INTEGER,
     EST_CNPJ VARCHAR(14),
     EST_CEP VARCHAR(8),
     EST_CNAE VARCHAR(7),
     EST_NOME VARCHAR(40),
     EST_ENDERECO VARCHAR(40),
     EST_BAIRRO VARCHAR(20),
     EST_UF VARCHAR(2),
     EST_TOTAL_EMPREGADO INTEGER,
     EST_SUBCLASSE_CNAE VARCHAR(2),
     EMP_PIS VARCHAR(11),
     EMP_SEXO VARCHAR(1),
     EMP_ADMISSAO DATE,
     EMP_NASCIMENTO DATE,
     EMP_INSTRUCAO VARCHAR(2),
     EMP_REMUNERACAO NUMERIC(12,2),
     EMP_HORAS_SEMANAIS VARCHAR(2),
     EMP_TIPO_MOVIMENTO VARCHAR(2),
     EMP_DIA_DESLIGAMENTO VARCHAR(2),
     EMP_NOME VARCHAR(40),
     EMP_CTPS VARCHAR(8),
     EMP_CTPS_SERIE VARCHAR(4),
     EMP_CTPS_UF VARCHAR(2),
     EMP_RACA_COR VARCHAR(1),
     EMP_PORTADOR_DEFICIENCIA VARCHAR(1),
     EMP_DEFICIENTE VARCHAR(1),
     EMP_TIPO_DEFICIENCIA VARCHAR(1),
     ADMISSOES INTEGER,
     DEMISSOES INTEGER,
     EMP_CBO VARCHAR(6))
AS
declare variable dta_inicio date;
declare variable dta_final date;
declare variable ano_bisexto varchar(1);
declare variable cnae varchar(7);
declare variable tp_movimento varchar(2);
begin
   /* Dados do autorizado e do estabelecimento */
   select dta_inicio,
          dta_final
   from first_last_day(:mes,  :ano)
   into :dta_inicio, :dta_final;
   select substring(e.nome from 1 for 35) as nome_entidade,
          c.codigo_caged,
          substring((e.endereco || ',' || e.numero) from 1 for 35) as 
endereco,
          e.cnpj ,
          e.cep,
          Substring(e.telefone_01 from 1 for 2) as ddd,
          substring(e.telefone_01 from 3 for 8) as telefone,
          e.uf,
          c.sefip_cnae
   from empresa e, config c
   into :aut_nome, :autorizacao, :aut_endereco, :aut_cnpj, :aut_cep, 
:aut_ddd,
        :aut_telefone, :aut_uf, :cnae;
   if (:autorizacao is null) then
     autorizacao = '0000000';
   est_nome = :aut_nome;
   est_cnpj = :aut_cnpj;
   est_cnae = substring(:cnae from 1 for 5);
   est_subclasse_cnae = substring(:cnae from 6 for 2);
   /* Total de trabalhadores existentes no 1º dia do mês */
   select (select count(f.codigo)
           from funcionario f) -
          (select count(h.matricula)
           from historico h
             join tabela_afastamento t on (t.codigo = h.codigo_tab_afas)
           where h.afa_ret = 'A'
             and t.ad = 'D')
   from rdb$database into :est_total_empregado;
   /* Total de movimentações no mês (admissões/demissões) */
   select count(f.codigo)
   from funcionario f
   where f.data_admissao between :dta_inicio and :dta_final into 
:admissoes;
   select count(h.matricula)
   from historico h
     join tabela_afastamento t on (t.codigo = h.codigo_tab_afas)
   where h.data between :dta_inicio and :dta_final
     and h.afa_ret = 'A'
     and t.ad = 'D' into :demissoes;
   aut_total_movimentacoes = :admissoes + :demissoes;
   /* Dados dos funcionários admitidos/demitidos no mês */
   for select f.pis_pasep,
              (case f.sexo
                 when 'F' then '2'
                 when 'M' then '1'
               end) as Sexo,
              f.nascimento,
              cast(f.grau_instrucao as varchar(2)) as instrucao,
              c.salario,
              cast(c.horas_semanais as varchar(2)) horas_semanais,
              f.data_admissao,
              cast(f.tipo_admissao as varchar(2)) as tp_movimento,
              ' ' as dia_desligamento,
              substring(f.nome from 1 for 40) as nome,
              f.ctps_numero,
              substring(f.ctps_serie from 1 for 4) as serie,
              f.raca_cor,
              f.deficiente,
              c.codigo_cbo,
              f.uf_emissor,
              f.deficiente_fisico
   from funcionario f
     join cargo c on (c.codigo = f.codigo_cargo)
   where f.data_admissao between :dta_inicio and :dta_final
   union all
   select f.pis_pasep,
          (case f.sexo
             when 'F' then '2'
             when 'M' then '1'
           end) as Sexo,
          f.nascimento,
          cast(f.grau_instrucao as varchar(2)) as instrucao,
          c.salario,
          cast(c.horas_semanais as varchar(2)) horas_semanais,
          f.data_admissao,
          cast(t.codigo_rais as varchar(2)) as tp_movimento,
          (extract(day from h.data))as dia_desligamento,
          substring(f.nome from 1 for 40) as nome,
          f.ctps_numero,
          substring(f.ctps_serie from 1 for 4) as serie,
          f.raca_cor,
          f.deficiente,
          c.codigo_cbo,
          f.uf_emissor,
          f.deficiente_fisico
   from historico h
     join funcionario f on (f.codigo = h.matricula)
     join cargo c on (c.codigo = f.codigo_cargo)
     join tabela_afastamento t on (t.codigo = h.codigo_tab_afas)
   where h.data between :dta_inicio and :dta_final
     and h.afa_ret = 'A'
     and t.ad = 'D'
   into :emp_pis, :emp_sexo, :emp_nascimento, :emp_instrucao,
        :emp_remuneracao, :emp_horas_semanais, :emp_admissao,
        :tp_movimento, :emp_dia_desligamento, :emp_nome,
        :emp_ctps, :emp_ctps_serie, :emp_raca_cor, :emp_deficiente,
        :emp_cbo, :emp_ctps_uf, :emp_tipo_deficiencia do
   begin
     if (:tp_movimento = '1') then
       emp_tipo_movimento = '10';
     if (:tp_movimento = '2') then
       emp_tipo_movimento = '20';
     if ((:tp_movimento = '3') or (:tp_movimento = '4')) then
       emp_tipo_movimento = '70';
     if (:tp_movimento = '5') then
       emp_tipo_movimento = '35';
     if ((:tp_movimento = '10') or (:tp_movimento = '20')) then
       emp_tipo_movimento = '32';
     if (:tp_movimento = '11') then
       emp_tipo_movimento = '31';
     if (:tp_movimento = '12') then
       emp_tipo_movimento = '45';
     if (:tp_movimento = '21') then
       emp_tipo_movimento = '40';
     if ((:tp_movimento = '30') or (:tp_movimento = '31')) then
       emp_tipo_movimento = '80';
     if ((:tp_movimento = '60') or (:tp_movimento = '62') or 
(:tp_movimento = '64'))  then
       emp_tipo_movimento = '60';
     if ((:tp_movimento = '70') or (:tp_movimento = '71') or 
(:tp_movimento = '72') or
         (:tp_movimento = '73') or (:tp_movimento = '74') or 
(:tp_movimento = '75') or
         (:tp_movimento = '76') or (:tp_movimento = '78') or 
(:tp_movimento = '79')) then
       emp_tipo_movimento = '50';
   suspend;
   end
end
-- 
[]'s,

Hélio Oliveira
Analista de Sistemas
Delphi Developer
http://hpensador.blogspot.com/





Mais detalhes sobre a lista de discussão lista