Fórum substring no firebird 1.5 #58660

08/08/2007

0

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

Responder

Post mais votado

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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


Emerson Nascimento

Emerson Nascimento
Responder

Gostei + 1

Mais Posts

08/08/2007

Catunda

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...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar