17 agosto 2011

STRZERO no Firebird

Lembra daquela excelente função do Clipper (e outras linguagens) para colocar zeros à esquerda de uma string? Em um projeto precisei usá-la no meu bd em Firebird sem utilizar UDF para preencher automaticamente dígitos de crachá e outras funções. Segue DDL da Stored Procedure. Copie e cole no Script Executive do IBExpert ! Bom proveito.

SET TERM ^ ;

create or alter procedure STRZERO (
    STRING varchar(254),
    DIGITOS smallint = 1)
returns (
    RETORNO varchar(254))
as
declare variable AUX varchar(254) = '';
declare variable I integer = 0;
declare variable TAMANHOSTR integer;
begin
 
/* Coloca a quantidade informada no 2o parametros de "Zeros" a direita da string
     O parametro digitos e o tamanho maximo de digitos da string
     ex: string de 5 digitos com entrada '99' ficara '00099'                         */
  select char_length(trim(:string))
  from rdb$database
  into :tamanhostr;

  aux = '';
  while (i<(:digitos-:tamanhostr)) do
  begin
    aux= '0'||aux;
    i=i+1;
  end
  select :aux||trim(:string)
  from rdb$database
  into :retorno;
  suspend;
end^

SET TERM ; ^

COMMENT ON PARAMETER STRZERO.STRING IS
'string que se vai adicionar os zeros a direita';

COMMENT ON PARAMETER STRZERO.DIGITOS IS
'quantidade de digitos que a string conterá.';


GRANT EXECUTE ON PROCEDURE STRZERO TO SYSDBA;




Nenhum comentário:

Postar um comentário