Dynamic SQL Error. expression evaluation not supported.

12/12/2016

0

Boa Tarde

como solucionar este erro no firebird

-- LOCALIZAR O PROXIMO CODIGO VAGO CAMPO TIPO VARCHAR()


-- na primeira linha eu concateno as 4 primeiras posições do código + as 3 últimas posicoes transformadas em inteiro somando + 1,
-- que já ira devolver o próximo código vago disponível,
-- no where só estou dizendo para selecionar somente os que começem com a mesma seção e grupo passado via aplicação ou procedure etc...,
-- e o AND NOT EXISTS eu falo para retornar linhas do select onde não exista uma consulta onde o código seja igual ao código novo já somado
-- com um 1 que seria o próximo,
-- o TOP 1 só diz para ele devolver uma linha, pois o legal dessa query que fiz é que se vc tiver 10 "buracos" nos registros tipo do 4 ao 10
-- está vago então essa query vai trazer todos os vagos já, basta alterar o TOP 1 para TOP a quantidade de próximos códigos disponíveis que vc quiser,



SELECT FIRST 1 cast(substring(c.CODIGO_BARRA from 1 for 4) as integer ) || lpad(cast(substring(c.CODIGO_BARRA from 5 for 7) + 1 as integer))
from COD_BARRAS as c
WHERE substring(c.CODIGO_BARRA from 1 for 4) = '0851'
AND NOT EXISTS(
SELECT cb.CODIGO_BARRA FROM COD_BARRAS cb
WHERE cb.CODIGO_BARRA = substring(cb.CODIGO_BARRA from 1 for 4) || lpad( cast( substring(cb.CODIGO_BARRA from 5 for 7) + 1 as integer) )
AND substring(cb.CODIGO_BARRA from 1 for 4) = '0851' )





alguem pode me ajudar a resolver este erro:


Dynamic SQL Error.
expression evaluation not supported.
Strings cannot be added or subtracted in dialect 3.



Essa dúvida foi gerada a partir de um comentário no artigo Seja um autor DevMedia
Paulo Agnezze

Paulo Agnezze

Responder

Post mais votado

12/12/2016

Paulo.

Seu erro está aqui



expression evaluation not supported. Strings cannot be added or subtracted in dialect 3.



É como se ele estivesse tentando somar antes de você converter para int.

Grande abs

Luiz Santos

Luiz Santos
Responder

Mais Posts

13/12/2016

Paulo Agnezze

Obrigado pela dica
Responder

16/12/2016

Paulo Agnezze

Boa tarde a todos

Resolvi em parte o erro


SELECT FIRST 1 substring(c.CODIGO_BARRA from 1 for 4) || LPAD(substring(c.CODIGO_BARRA from 5 for 7),3) AS CODIGO_NOVO
from COD_BARRAS as c WHERE substring(c.CODIGO_BARRA from 1 for 4) = '0854'
AND NOT EXISTS(
SELECT CODIGO_BARRA FROM COD_BARRAS
WHERE CODIGO_BARRA = substring(c.CODIGO_BARRA from 1 for 4) || LPAD(substring(c.CODIGO_BARRA from 5 for 7),3)
AND substring(c.CODIGO_BARRA from 1 for 4) = '0854' )



resultado da consulta

CODIGO_NOVO

0854001


Agora esta só faltando somar +1 , ai que esta o problema comando lpad nao aceita cast as integer


no aguardo
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar