Ajuda em Trigger

Firebird

03/12/2007

Olá a todos da lista mais uma vez venho pedir a ajuda de vocês!

eu tenho uma triger que pega o valor de um generator e concatena com os 2 ultimos digitos do ano corrente, gravando por exemplo 14/07 em um campo varchar

o cogido da tigger:
CREATE TRIGGER OS_TES_BI FOR OS 
ACTIVE BEFORE INSERT OR UPDATE POSITION 1 
AS 
begin 
  /* Trigger text */ 
   IF (NEW.teste IS NULL) THEN 
    NEW.teste = GEN_ID(gen_os_tes,1)||´/´||substring ((extract (year from current_date))from 3 for 4) ; 
end 
^ 


SET TERM ; ^

Mas eu gostaria de testar o valor do generator e se o valor for => que 4 casas decimais concatenar o numero de zeros(0)antes do generator produzindo assim um valor semelhante a esse: 0014/07
e gravar isso no campo!!
Alguem pode me ajudar?


Logam

Logam

Curtidas 0

Respostas

Delphi32

Delphi32

03/12/2007

Bem, primeiro você teria colocar o valor do generator em uma variável convertendo para string. Depois o trabalho seria obter o número de caracteres dessa string, não? Para isso você tem duas opções:

1) Utilizar uma UDF para contar caracteres. Se não me engano, dentro das dll´s de udf que vem com o firebird já existe uma função dessa.

2) Usar uma stored procedure que eu fiz para contar o número de caracteres. Segue o código:

SET TERM ^;
CREATE PROCEDURE "SP_CONTACARACTERES"
(
   INPUT_TEXT VARCHAR(255) CHARACTER SET WIN1252
)
RETURNS
(
   NUMERO_CARACTERES INTEGER
)
AS
DECLARE VARRIABLE TMP VARCHAR(255);
BEGIN
   TMP = INPUT_TEXT;
   NUMERO_CARACTERES = 0;
   WHILE (TMP<>´´) DO
   BEGIN
      TMP = SUBSTRING(TMP FROM 2 FOR 255);
      RESULTADO = RESULTADO + 1;
   END
   SUSPEND;
END
^
SET TERM ;^


Qualquer dúvida, poste aqui!

t+!


GOSTEI 0
Logam

Logam

03/12/2007

Olá delphi32!!
É essa a ideia que eu quero!!
vc falou que da pra fazer usando uma função que tem em uma udf?
sim eu achei a função strlen na udf do Firebird mas não consegui fazer oque quero usando ela!
vc poderia me ajudar??
é que sou iniciante em programação !!


GOSTEI 0
POSTAR