substring no firebird 1.5

Firebird

08/08/2007

Estou montando uma Storedprocedure no firebird 1.5 e estou com problemas no trecho abaixo:

xpedaco é uma variavel a ser incrementada
xconta é um parametro que recebeu um valor do select
xtamv é uma variavel que funciona como contador
o problema é que não estou conseguindo passar o xtamv como posição inicial para a substring. Já tentei como :xtamv e como (:xtamv) mas dá sempre no mesmo erro.

xpedaco=´´;
xtamv=1;
while (xtamv < 7) do
begin
if (substring(:xconta from xtamv for 1) in (´0123456789´)) then
xpedaco=xpedaco||substring(:xconta from xtamv for 1);
xtamv=xtamv+1;
end

Qual o problema?


Catunda

Catunda

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

08/08/2007

substring() é uma função interna do firebird.
- o primeiro parâmetro pode ser uma expressão, contante ou indentificador que retorne uma string.
- o segundo e o terceiro parâmetro - que é opcional - devem ser inteiros e não podem ser parâmetros. devem ser constantes.
em função disso, tente com [i:8a4d0ccbb5]execute statement[/i:8a4d0ccbb5], que executa instruções dinâmicas. segue um exemplo, baseado no código que você passou:

declare variable instrucao varchar(100);
declare variable letra char(1);


  xpedaco = ´´;
  xtamv = 1;

  while (xtamv < 7) do
  begin
    instrucao = ´select substring(´´´ || xconta || ´´´ from ´ || xtamv || ´ for 1) from rdb$database´;
    execute statement instrucao into :letra;

    if (letra in (´0´,´1´,´2´,´3´,´4´,´5´,´6´,´7´,´8´,´9´)) then
      xpedaco = xpedaco || letra;

    xtamv = xtamv + 1;
  end

obs.: havia uma falha na cláusula IN do if que você havia publicado.
no exemplo acima creio estar da forma que você precisa


GOSTEI 1

Mais Respostas

Catunda

Catunda

08/08/2007

valew emerson.en

Eu já havia feito aqui uma solução paleativa, colocado as 6 linhas possiveis de substring, mas isso é coisa mesmo lusitana..eh eh eh eh
Testei o seu exemplo e deu exatamente o resultado esperado, e economizando linhas...


GOSTEI 0
POSTAR