Fórum O que está errado nesta Procedure ?? #57053
09/10/2006
0
[i:faf2904d8d]invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 31, char 2.
END.[/i:faf2904d8d]
Tentei com introduzir [SET TERM !! ;] (início e final da procvedure) - Mas o IBexpert não está aceitando esse termo - não sei por quê....
Vocês poderiam verificar o que está errado no código ??
Desde já, agradeço à atenção !!
[b:faf2904d8d]Segue procedure abaixo:[/b:faf2904d8d]
CREATE PROCEDURE ´COPIAR_DADOS_TAB_COMPRAS_PRECO´ (´I_AREANEGOCIO´ CHAR(5)
CHARACTER SET ASCII, ´I_EXERCICIO´ CHAR(5) CHARACTER SET ASCII,´I_VERSAO´
VARCHAR(15) CHARACTER SET ASCII )
AS
DECLARE VARIABLE COD_AREANEGOCIO CHAR(5);
DECLARE VARIABLE EXERCICIO CHAR(5);
DECLARE VARIABLE VERSAO CHAR(5);
DECLARE VARIABLE CODIGO_MATPRIMA CHAR(5);
BEGIN
FOR
SELECT C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, C.CODIGO_MATPRIMA
FROM
PLANO_COMPRAS_2(:I_AREANEGOCIO, :I_EXERCICIO , :I_VERSAO ) C
INTO :COD_AREANEGOCIO, : EXERCICIO, : VERSAO, :CODIGO_MATPRIMA
DO
BEGIN
INSERT INTO PLANO_COMPRAS_PRECO (COD_AREANEGOCIO, EXERCICIO, VERSAO,
CODIGO_MATPRIMA) VALUES (COD_AREANEGOCIO, EXERCICIO, VERSAO, CODIGO_MATPRIMA)
END
END;
Osvaldo Modesto
Curtir tópico
+ 0Posts
09/10/2006
Cabelo
Gostei + 0
09/10/2006
Osvaldo Modesto
Vou testar + Tarde.
Depois falo como foi....
Muito Obrigado
Gostei + 0
10/10/2006
Osvaldo Modesto
Retirei o ponto-virgula [;] - Continua dando exatamente o mesmo erro...
A impressão que dá é que a linha anterior ao END tem alguma coisa errada...
Vc. tem alguma idéia do que pode ser??
Desde já, fico muito grato pela atenção
Gostei + 0
13/10/2006
Cabelo
O que falta é um ponto e vírgula depois da intrução de insert..
CREATE PROCEDURE COPIAR_DADOS_TAB_COMPRAS_PRECO ( I_AREANEGOCIO CHAR(5) CHARACTER SET ASCII, I_EXERCICIO CHAR(5) CHARACTER SET ASCII, I_VERSAO VARCHAR(15) CHARACTER SET ASCII ) AS DECLARE VARIABLE COD_AREANEGOCIO CHAR(5); DECLARE VARIABLE EXERCICIO CHAR(5); DECLARE VARIABLE VERSAO CHAR(5); DECLARE VARIABLE CODIGO_MATPRIMA CHAR(5); BEGIN FOR SELECT C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, C.CODIGO_MATPRIMA FROM PLANO_COMPRAS_2(:I_AREANEGOCIO, :I_EXERCICIO , :I_VERSAO ) C INTO :COD_AREANEGOCIO, : EXERCICIO, : VERSAO, :CODIGO_MATPRIMA DO BEGIN INSERT INTO PLANO_COMPRAS_PRECO (COD_AREANEGOCIO, EXERCICIO, VERSAO, CODIGO_MATPRIMA) VALUES (COD_AREANEGOCIO, EXERCICIO, VERSAO, CODIGO_MATPRIMA); END END
Outra coisa.. por quê você usa esta aspas???? repare que eu retirei e irá funcionar perfeitamente..
Não há necessidade de usá-las..
Se executar a procedure exatamente como está tenho certeza que irá funcionar..
um abraço..
Gostei + 0
14/10/2006
Osvaldo Modesto
Obrigado pelo retorno!!
Também faltava 2 pontos (:) nos parametros logo após a instrução VALUE. Já compilei no IBExpert... Agora estou com outro probleminha:
Estou tentando executar esta procedure (ainda no IBExpert) com o seguinte código
EXECUTE PROCEDURE COPIAR_DADOS_TAB_COMPRAS_PRECO
´
Me dá o seguinte erro:
[i:80498be223]Unsuccessful execution caused by a system error that precludes
successful execution of subsequent statements.
Dynamic SQL Error.
parameter mismatch for procedure COPIAR_DADOS_TAB_COMPRAS_PRECO.[/i:80498be223]
Se eu adicionar os parametros de entrada na sentença, como no código abaixo, dá outra msg.:
EXECUTE PROCEDURE COPIAR_DADOS_TAB_COMPRAS_PRECO (
i_areanegocio char(5),
i_exercicio char(5),
i_versao varchar(15))
Msg. Erro:
[i:80498be223]Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 3.
i_areanegocio.[/i:80498be223]
O que há de errado na instrução de execução ??
Obrigado pela atenção!!
Grande Abraço!!
Gostei + 0
16/10/2006
Sremulador
Gostei + 0
16/10/2006
Cabelo
Você está usando o comando EXECUTE PROCEDURE, então tem que usar a procedure como se fosse no delphi, ou em qualquer linguagem..
EXECUTE PROCEDURE COPIAR_DADOS_TAB_COMPRAS_PRECO (
´teste´, ´2006´, ´Ver Teste´)
Assim deve funcionar...
No IBExpert compilou??? se não deu erro deve funcionar...
Gostei + 0
16/10/2006
Osvaldo Modesto
Está meio complicado aqui...
Primeiramente eu queria executar a procedure no IBExpert pra ver se funciona... Mandei a instrução na forma como vc. me deu:
[i:814d756499][[b:814d756499]i]EXECUTE PROCEDURE COPIAR_DADOS_TAB_COMPRAS_PRECO (
´teste´, ´2006´, ´Ver Teste´[/i:814d756499])[/b:814d756499][/i]
O IBExp executa, como o primeiro dado é incorreto, não atualiza a tabela, normal... Aí eu substitui o primeiro dado ‘ Teste’ por ‘12111’ que é um dado válido, o IBEXp dá a msg.:
[i:814d756499][b:814d756499]Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation[/b:814d756499][/i:814d756499].
Reparei que qualquer conjunto das 3 informações, onde pelo menos delas seja falsa – O IBExp compila, se as 3 forem verdadeiras – não compila.
Bem, depois dessas tentativas, fui tentar direto na aplicação....
Aqui também tenho dúvidas. Primeiro criei um esquema de conexão com 1 sqlStoredProc, 1 dataSetProvider, 1 ClientDataSet e 1 DataSource – Bem, o primeiro componente (SqlStoredProc – estou usando em substituição ao sqlQuery – pois a procedure que irei buscar não tem sentença RETURNS – está correto ??
Porém não consegui identificar no Object Inspector, onde colocar a instrução Execute Procedure....
Onde coloco a instrução EXECUTE PROCEDURE (...) nesse objeto ??
Bem, além disso tudo, agora estou em dúvida se uma procedure com parâmetros (como é o caso dessa...) servirá para fazer o que preciso... Não sei se construí a procedure da forma correta...
Relembrando, preciso que toda vez que a procedure PLANO_COMPRAS_2 “calcula” os volumes de compras, os campos COD_MATPRIMA, EXERCICIO, VERSAO e AREANEGOCIO, sejam copiados para outra tabela: PLANO_COMPRAS_PRECO, (de forma que o usuário, necessite apenas informar os preços de compra nessa ultima tabela). Isso deverá funcionar de forma automatica, trazendo todos esses dados... Se precisarmos informar parâmetros, só estaremos “copiando” os dados informados ??
Então pensando nisso tentei criar uma outra Procedure idêntica sem os parâmetros (ainda sem saber se isso é necessário...), deu o seguinte erro:
[i:814d756499][b:814d756499]Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.[/b:814d756499][/i:814d756499]
Da nova procedure (sem parâmetros) retirei o trecho abaixo:
( i_areanegocio char(5),
i_exercicio char(5),
i_versao varchar(15))
Então a procedure que tentei compilar está assim (acusando o erro acima)... O que está errado ??
CREATE PROCEDURE COPIAR_DADOS_COMPRAS_PRECO
as
declare variable cod_areanegocio char(5);
declare variable exercicio char(5);
declare variable versao char(5);
declare variable codigo_matprima char(5);
BEGIN
FOR
SELECT C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, C.CODIGO_MATPRIMA
FROM PLANO_COMPRAS_2 (:I_AREANEGOCIO, :I_EXERCICIO , :I_VERSAO )C
INTO :COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :CODIGO_MATPRIMA
DO BEGIN
INSERT INTO PLANO_COMPRAS_PRECO (COD_AREANEGOCIO, EXERCICIO, VERSAO, CODIGO_MATPRIMA)
VALUES (:COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :CODIGO_MATPRIMA);
END
END;
Desculpe ter me alongado tanto...
Novamente, Muito Obrigado pela Ajuda!!!
Gostei + 0
17/10/2006
Cabelo
Bom dia.. vamos lá..
Colega é o seguinte, esta mensagem dá erro quando há uma divisão por zero, ou o campo string é maior que o indicado, ou então quando existem caracteres especiais não indicados por um charset ou collate adequado. Qual é o charset que você está usando na conexão do IBExpert??
Repare que o mesmo problema ainda persiste..
Você deve indicar o SQLConnection neste componente e indicar o nome da Procedure no Banco, assim:
SqlStoredProc.StoredProcName := ´COPIAR_DADOS_TAB_COMPRAS_PRECO´; SqlStoredProc.ParamByName(´i_areanegocio´).AsString := ´Valor do parâmetro´; SqlStoredProc.ParamByName(´i_exercicio´).AsString := ´Valor do parâmetro´; SqlStoredProc.ParamByName(´i_versao´).AsString := ´Valor do parâmetro´; SqlStoredProc.ExecProc;
Colega.. sua procedure está bem estruturada.. deve funcionar.. só preste atenção nos tamanhos dos parâmetros e campos usados e sempre use um charset adequado.. tanto na conexão do IBExpert quanto na conexão do SQLConnection no Delphi..
Não esquenta, enquanto puder ajudar estou aí..
Um abraço..
Gostei + 0
17/10/2006
Osvaldo Modesto
Obrigado pela ajuda e pelos códigos que enviou...
Vou avaliar os tópicos que vc. comentou.
Qq. problema posso lhe contatar novamente??
Muito Obrigado!!
Gostei + 0
18/10/2006
Cabelo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)