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