Fórum Dynamic SQL Error expression evaluation not supported #620806
06/12/2023
0
Gostaria que alguém pudesse me ajudar com o erro acima. Quando clico em OK no IBConsole na criação de Stored Procedures, ele devolve este erro, mas não aponta a linha nem nada. Segue abaixo o código:
BEGIN
/*DECLARE VARIABLE
Contador_1 INT,
Contador_2 INT,
Digito_1 INT,
Digito_2 INT,
Nr_Documento_Aux VARCHAR(11)*/
-- Remove espaços em branco
Nr_Documento_Aux = LTRIM(RTRIM("Nr_Documento"));
Digito_1 = 0;
-- Remove os números que funcionam como validação para CPF, pois eles "passam" pela regra de validação
IF (Nr_Documento_Aux IN (''''00000000000'''', ''''11111111111'''', ''''22222222222'''', ''''33333333333'''', ''''44444444444'''', ''''55555555555'''', ''''66666666666'''', ''''77777777777'''', ''''88888888888'''', ''''99999999999'''', ''''12345678909'''')) THEN
cValido = ''''0'''';
-- Verifica se possui apenas 11 caracteres
IF (STRLEN(Nr_Documento_Aux) <> 11) THEN
cValido = ''''0'''';
ELSE
BEGIN
-- Cálculo do segundo dígito
Nr_Documento_Aux = SUBSTR(Nr_Documento_Aux, 1, 9);
Contador_1 = 2;
WHILE (Contador_1 <= 10) DO
BEGIN
Digito_1 = Digito_1 + (Contador_1 * CAST(SUBSTR(Nr_Documento_Aux, 11 - Contador_1, 1) as int));
Contador_1 = Contador_1 + 1;
end
Digito_1 = Digito_1 - (Digito_1/11)*11;
IF (Digito_1 <= 1) THEN
Digito_1 = 0;
ELSE
Digito_1 = 11 - Digito_1;
Nr_Documento_Aux = Nr_Documento_Aux + CAST(Digito_1 AS VARCHAR(1));
IF (Nr_Documento_Aux <> SUBSTR("Nr_Documento", 1, 10)) THEN
cValido = ''''0'''';
ELSE
BEGIN
-- Cálculo do segundo dígito
Digito_2 = 0;
Contador_2 = 2;
WHILE (Contador_2 <= 11) DO
BEGIN
Digito_2 = Digito_2 + (Contador_2 * CAST(SUBSTR(Nr_Documento_Aux, 12 - Contador_2, 1) AS INT));
Contador_2 = Contador_2 + 1;
end
Digito_2 = Digito_2 - (Digito_2/11)*11;
IF (Digito_2 < 2) THEN
Digito_2 = 0;
ELSE
Digito_2 = 11 - Digito_2;
Nr_Documento_Aux = Nr_Documento_Aux + CAST(Digito_2 AS VARCHAR(1));
IF (Nr_Documento_Aux <> "Nr_Documento") THEN
cValido = ''''0'''';
END
END
cValido = ''''1'''';
ENDObrigado desde já,
Rogério
Rogério Monteiro
Curtir tópico
+ 0Post mais votado
08/12/2023
Nr_Documento_Aux = Nr_Documento_Aux || CAST(Digito_2 AS VARCHAR(1));
Emerson Nascimento
Gostei + 1
Mais Posts
08/12/2023
Emerson Nascimento
Nr_Documento_Aux = LTRIM(RTRIM("Nr_Documento"));
há mais de um comando assim
Gostei + 0
09/12/2023
Rogério Monteiro
Nr_Documento_Aux = Nr_Documento_Aux || CAST(Digito_2 AS VARCHAR(1));
Muito obrigado, Emerson! Eu não tinha me atentado ao sinal de concatenação. Agora funcionou. Boas vibrações!!!
Gostei + 0
11/12/2023
Arthur Heinrich
Gostei + 1
13/12/2023
Emerson Nascimento
Se for esse o caso, não há tentativa de conversão. O mecanismo do banco vai tentar somar as strings mesmo. Mesmo que você faça '2'+'2' não vai funcionar.
Gostei + 0
14/12/2023
Arthur Heinrich
Se for esse o caso, não há tentativa de conversão. O mecanismo do banco vai tentar somar as strings mesmo. Mesmo que você faça '2'+'2' não vai funcionar.
Segundo o documento: https://firebirdsql.org/file/documentation/chunk/en/refdocs/fblangref30/fblangref30-datatypes-conversion.html
In Dialect 1, mixing integer data and numeric strings is usually possible because the parser will try to cast the string implicitly. For example,
2 + '1'
will be executed correctly.
Porém, parece que funciona só para valores numéricos.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)