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?
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
Curtir tópico
+ 0
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:
obs.: havia uma falha na cláusula IN do if que você havia publicado.
no exemplo acima creio estar da forma que você precisa
- 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

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...
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
Clique aqui para fazer login e interagir na Comunidade :)