Res: [firebase-br] checar se já existe um generator criado numa store procedure

Ana Virginia da Silva virginia em farsoft.com.br
Seg Jul 23 11:20:13 -03 2007


Pessoal, consegui montar alguma coisa,

mas gostaria de saber como posso pegar o 

valor dinâmico do generator criado dentro da procedure:

 

Preciso jogar o valor dentro da variável id mas tá dando erro (902).

 

Preciso substituir o comando:

 

 execute statement 'select gen_id('||UPPER(:nomeCampo)||',1) from
RDB$DATABASE;';

  select RDB$GENERATOR_ID from RDB$GENERATORS WHERE

         RDB$GENERATOR_NAME=:nomeCampo into id;



por um outro?

 

 

 

 

procedure inteira:

 

CREATE PROCEDURE INCLUIR_ORCAMENTO_GENERATOR (

    vfilial integer,

    vis_cfopoperacao integer,

    vcfop varchar(5),

    vis_setor integer,

    vis_setordestino integer)

returns (

    ok double precision)

as

declare variable nomecampo varchar(32);

declare variable gerador varchar(32);

declare variable id double precision;

declare variable idorcamento double precision;

begin

  ok=-1;

 

  /* NOME + FILIAL + TIPO */

  nomeCampo='ID_ORC_'||vfilial||'_'||vis_cfopoperacao;

 

  /* Trata o campo ID_ORCAMENTO (PK) */

 

  idOrcamento=gen_id(gen_orcamentos_id,1);

 

  /* Rotina para criar o generator caso ele nao exista*/

  gerador=null;

  select RDB$GENERATOR_NAME from RDB$GENERATORS

  where RDB$GENERATOR_NAME=:nomeCampo into :gerador;

  if (gerador=null) then

     begin

       INSERT INTO RDB$GENERATORS (RDB$GENERATOR_NAME)

                   VALUES (UPPER(:nomeCampo));

     end

 

  /* Rotina para o campo CONTROLE */

  execute statement 'select gen_id('||UPPER(:nomeCampo)||',1) from
RDB$DATABASE;';

  select RDB$GENERATOR_ID from RDB$GENERATORS WHERE

         RDB$GENERATOR_NAME=:nomeCampo into id;

 

     /* Inclui um registro na tabela orcamentos */

     if (vis_setordestino>0) then

        begin

          INSERT INTO ORCAMENTOS (ID_ORCAMENTO, CONTROLE, IS_FILIAL, DATA,
STATUS, FATURADO, IS_CFOPOPERACAO, CFOP, IS_SETORESTOQUE,
IS_SETORESTOQUE_DESTINO,

          COBRANCA_FRETE, DESCONTAR_IR, GENERO, IGNORAR_MD)

          VALUES (:idOrcamento, :id, :vfilial, (SELECT current_date FROM
RDB$DATABASE),'A','N',

          :vis_cfopoperacao, :vcfop, :vis_setor,:vis_setordestino, '1', 'N',
'E', 'N');

        end

     else

        begin

          INSERT INTO ORCAMENTOS (ID_ORCAMENTO, CONTROLE, IS_FILIAL, DATA,
STATUS, FATURADO, IS_CFOPOPERACAO, CFOP, IS_SETORESTOQUE,
IS_SETORESTOQUE_DESTINO,

          COBRANCA_FRETE, DESCONTAR_IR, GENERO, IGNORAR_MD)

          VALUES (:idOrcamento, :id, :vfilial, (SELECT current_date FROM
RDB$DATABASE),'A','N', :vis_cfopoperacao, :vcfop, :vis_setor,null, '1', 'N',
'E', 'N');

        end

 

     /* retorna o valor do id da PK para jogar como parametro para editar a
tabela */

     ok = idOrcamento;

 

suspend;

end

 




Mais detalhes sobre a lista de discussão lista