Pegar valor de Generator dinamicamente

Firebird

28/12/2005

Olá amigos,

Dentro das minhas storeds eu pego normalmente o valor do generator assim:

SELECT GEN_ID(seq_pedcompra,1) FROM RDB$DATABASE INTO :PCODIGO;


Funciona direitinho porém eu preciso que o nome do Generator seja dinamico pois tenho o sistema multiempresa e terei os Generator assim:

SEQ_PEDCOMPRA_EMP1
SEQ_PEDCOMPRA_EMP2
SEQ_PEDCOMPRA_EMP3

Como eu poderia fazer?

Na stored eu recebo o parametro PEMPRESA pra indicar em qual empresa o usuário está trabalhando.

Acho que é algo com EXECUTE PROCEDURE sei lá, mas foge ao meu conhecimento.

Vlw!


Romulocpd

Romulocpd

Curtidas 0

Respostas

Armando.boza

Armando.boza

28/12/2005

if (PEMPRESA = 1) then begin
 SELECT GEN_ID(seq_pedcompra_emp1,1) FROM RDB$DATABASE INTO :PCODIGO; 
end
if (PEMPRESA = 2) then begin
 SELECT GEN_ID(seq_pedcompra_emp2,1) FROM RDB$DATABASE INTO :PCODIGO; 
end
if (PEMPRESA = 3) then begin
 SELECT GEN_ID(seq_pedcompra_emp3,1) FROM RDB$DATABASE INTO :PCODIGO; 
end



GOSTEI 0
Romulocpd

Romulocpd

28/12/2005

Fala Armando,

Desta forma não me atende. E se eu tiver 10 empresas? E veja, deve ser algo dinamico mesmo pois tenho no meu sistema umas 40 storeds só de inclusao onde eu uso o Generator, daí tenho que fazer isso em todas?

Por isso que perguntei.. de acordo como parametro PEMPRESA eu montaria uma string com o nome do generator e pegava o nome.

Se alguem souber ae!

Vlw!


GOSTEI 0
Afarias

Afarias

28/12/2005

|Dentro das minhas storeds eu pego normalmente o valor do generator
|assim: SELECT GEN_ID(seq_pedcompra,1) FROM RDB$DATABASE
|INTO :PCODIGO;

dentro de um SP ou Trigger vc pode simplificar usando apenas:

PCODIGO = GEN_ID(seq_pedcompra, 1);


|Funciona direitinho porém eu preciso que o nome do Generator seja
|dinamico pois tenho o sistema multiempresa e terei os Generator assim:

vc pode executar um SELECT dinâmico usando EXECUTE STATEMENT (FB 1.5 ou superior), algo como:

EXECUTE STATEMENT ´SELECT GEN_ID(SEQ_PEDCOMPRA_EMP´ ||
:PEMPRESA || ´, 1) FROM RDB$DATABASE´
INTO :PCODIGO ;


T+


GOSTEI 0
Romulocpd

Romulocpd

28/12/2005

afarias,

Po cara... funcionou perfeitamente!!!

A única coisa é que eu tive que fazer um cast pois ele tava dando problema de type..


EXECUTE STATEMENT ´SELECT CAST(GEN_ID(SEQ_PEDCOMPRA_EMP´ ||
:PEMPRESA || ´, 1) AS INTEGER) FROM RDB$DATABASE´
INTO :PCODIGO ; 


Po, exatamente isso que eu queria! Agora fica mole. Na trigger AFTER e BEFORE INSERT da tabela EMPRESA eu controlo a inclusao e exclusao dos Generators!

Vlw kra!!!! T+


GOSTEI 0
POSTAR