Subject Help: GDS Exception. 335544321. arithmetic exception, numeric overflow, or string truncation
Author Francisco Antonio Vieira Souza
I hate this [arithmetic exception, numeric overflow, or string
truncation] because I never know WHERE to look for the cause of the
exception, I have an SP with 54 input parameters, how can I know which
of them is causing the exception??

I appreciate any help. By the way, is there any easy way to debug SP to
prevent this error?
Thank you very much.

Here is my SP:
CREATE PROCEDURE SP_SET_SALVAR_CONHECIMENTO (
REMETENTE VARCHAR(18),
DESTINATARIO VARCHAR(18),
TOMADOR VARCHAR(18),
REDESPACHO VARCHAR(18),
REDESPACHO_PAGO VARCHAR(1),
VEICULO1 VARCHAR(10),
VEICULO2 VARCHAR(10),
TARIFA INTEGER,
ESPECIE VARCHAR(25),
NATUREZA VARCHAR(25),
MENSAGEM VARCHAR(25),
VALOR_NOTAS NUMERIC(13,5),
PESO_TOTAL NUMERIC(12,3),
COMPRIMENTO NUMERIC(13,4),
LARGURA NUMERIC(13,4),
ALTURA NUMERIC(13,4),
MEDIDA NUMERIC(13,4),
QUANTIDADE NUMERIC(14,3),
PAGO_PAGAR VARCHAR(1),
METROS_CUBICOS NUMERIC(13,4),
VALOR_FRETE_PESO NUMERIC(13,5),
TAXA_SOBRE_FRETE NUMERIC(5,5),
VALOR_CAT NUMERIC(13,5),
VALOR_REDESPACHO NUMERIC(13,5),
VALOR_PEDAGIO NUMERIC(13,5),
VALOR_GRIS NUMERIC(13,5),
VALOR_AUTONOMO NUMERIC(13,5),
VALOR_COLETA NUMERIC(13,5),
VALOR_OUTROS NUMERIC(13,5),
VALOR_PRESTACAO NUMERIC(13,5),
VALOR_BASE_ICMS NUMERIC(13,5),
ALIQUOTA_ICMS NUMERIC(5,5),
VALOR_ICMS NUMERIC(13,5),
ALIQUOTA_COFINS NUMERIC(5,5),
ALIQUOTA_PIS NUMERIC(5,5),
ALIQUOTA_IRPJ NUMERIC(5,5),
ALIQUOTA_CSSL NUMERIC(5,5),
ALIQUOTA_INSS NUMERIC(5,5),
ALIQUOTA_DARF NUMERIC(5,5),
ALIQUOTA_SUBSTITUICAO NUMERIC(5,5),
ALIQUOTA_SERVICO NUMERIC(5,5),
DATA_EMISSAO DATE,
HORA_EMISSAO TIME,
CALCULADO_ATE VARCHAR(25),
CFOP VARCHAR(5),
FATURADO_POR VARCHAR(50),
VALOR_FAIXA_FRETE_PESO NUMERIC(13,5),
CPF_MOTORISTA VARCHAR(14),
PERCENTUAL_NOTAS NUMERIC(5,5),
VALOR_DO_FRETE NUMERIC(13,5),
ID_END_REMETENTE INTEGER,
ID_END_DESTINATARIO INTEGER,
ID_END_TOMADOR INTEGER,
ID_END_REDESPACHO INTEGER)
RETURNS (
CONHECIMENTO_GERADO INTEGER)
AS
DECLARE VARIABLE NUMERO INTEGER;
DECLARE VARIABLE REMETENTE_NOME VARCHAR(50);
DECLARE VARIABLE REMETENTE_IE VARCHAR(18);
DECLARE VARIABLE REMETENTE_ENDERECO VARCHAR(50);
DECLARE VARIABLE REMETENTE_BAIRRO VARCHAR(30);
DECLARE VARIABLE REMETENTE_CIDADE VARCHAR(35);
DECLARE VARIABLE REMETENTE_UF VARCHAR(2);
DECLARE VARIABLE REMETENTE_CEP VARCHAR(10);
DECLARE VARIABLE DESTINATARIO_NOME VARCHAR(50);
DECLARE VARIABLE DESTINATARIO_IE VARCHAR(18);
DECLARE VARIABLE DESTINATARIO_ENDERECO VARCHAR(50);
DECLARE VARIABLE DESTINATARIO_BAIRRO VARCHAR(30);
DECLARE VARIABLE DESTINATARIO_CIDADE VARCHAR(35);
DECLARE VARIABLE DESTINATARIO_UF VARCHAR(2);
DECLARE VARIABLE DESTINATARIO_CEP VARCHAR(10);
DECLARE VARIABLE TOMADOR_NOME VARCHAR(50);
DECLARE VARIABLE TOMADOR_IE VARCHAR(18);
DECLARE VARIABLE TOMADOR_ENDERECO VARCHAR(50);
DECLARE VARIABLE TOMADOR_BAIRRO VARCHAR(30);
DECLARE VARIABLE TOMADOR_CIDADE VARCHAR(35);
DECLARE VARIABLE TOMADOR_UF VARCHAR(2);
DECLARE VARIABLE TOMADOR_CEP VARCHAR(10);
DECLARE VARIABLE REDESPACHO_NOME VARCHAR(50);
DECLARE VARIABLE REDESPACHO_IE VARCHAR(18);
DECLARE VARIABLE REDESPACHO_ENDERECO VARCHAR(50);
DECLARE VARIABLE REDESPACHO_BAIRRO VARCHAR(30);
DECLARE VARIABLE REDESPACHO_CIDADE VARCHAR(35);
DECLARE VARIABLE REDESPACHO_UF VARCHAR(2);
DECLARE VARIABLE REDESPACHO_CEP VARCHAR(10);
begin
REMETENTE_NOME = '';
REMETENTE_IE = '';
REMETENTE_ENDERECO = '';
REMETENTE_BAIRRO = '';
REMETENTE_CIDADE = '';
REMETENTE_UF = '';
REMETENTE_CEP = '';
DESTINATARIO_NOME = '';
DESTINATARIO_IE = '';
DESTINATARIO_ENDERECO = '';
DESTINATARIO_BAIRRO = '';
DESTINATARIO_CIDADE = '';
DESTINATARIO_UF = '';
DESTINATARIO_CEP = '';
TOMADOR_NOME = '';
TOMADOR_IE = '';
TOMADOR_ENDERECO = '';
TOMADOR_BAIRRO = '';
TOMADOR_CIDADE = '';
TOMADOR_UF = '';
TOMADOR_CEP = '';
REDESPACHO_NOME = '';
REDESPACHO_IE = '';
REDESPACHO_ENDERECO = '';
REDESPACHO_BAIRRO = '';
REDESPACHO_CIDADE = '';
REDESPACHO_UF = '';
REDESPACHO_CEP = '';

/* Para pegar o proximo numero do conhecimento */
SELECT cn.conhecimento FROM CONTROLA_NUMEROS cn INTO :numero;
numero = :numero + 1;

/* Inserir os dados no conhecimento */
INSERT INTO
conhecimento(NUMERO,
REMETENTE,
DESTINATARIO,
TOMADOR,
REDESPACHO,
REDES_PAGO,
VEICULO,
VEICULO2,
TARIFA,
ESPECIE,
NATUREZA,
NOTAS4, /*CAMPO MENSAGEM*/
VALORNOTAS,
PESOTOTAL,
COMPRIMENTO,
LARGURA,
ALTURA,
MEDIDA,
QUANTIDADE,
PAGO_PAGAR,
METROSCUBICOS,
VALOR_FRETEPESO,
TAXA_SOBREFRETE,
VALOR_CAT,
VALOR_REDESPACHO,
VALOR_PEDAGIO,
VALOR_GRIS,
VALOR_AUTONOMO,
VALOR_COLETA,
VALOR_OUTROS,
VALOR_PRESTACAO,
BASE_ICMS,
ALIQ_ICMS,
VALOR_ICMS,
ALIQ_COFINS,
ALIQ_PIS,
ALIQ_IRPJ,
ALIQ_CSSL,
ALIQ_INSS,
ALIQ_DARF,
ALIQ_SUBST,
ALIQ_SERVICO,
D_EMISSAO,
H_EMISSAO,
CALCULADO_ATE,
CFOP,
FATURADO_POR,
VALOR_FAIXA_FRETE_PESO,
CPF_MOTORISTA,
PERCENTUAL_NOTAS,
VALOR_FRETE)
VALUES(:NUMERO,
:REMETENTE,
:DESTINATARIO,
:TOMADOR,
:REDESPACHO,
:REDESPACHO_PAGO,
:VEICULO1,
:VEICULO2,
:TARIFA,
:ESPECIE,
:NATUREZA,
:MENSAGEM,
:VALOR_NOTAS,
:PESO_TOTAL,
:COMPRIMENTO,
:LARGURA,
:ALTURA,
:MEDIDA,
:QUANTIDADE,
:PAGO_PAGAR,
:METROS_CUBICOS,
:VALOR_FRETE_PESO,
:TAXA_SOBRE_FRETE,
:VALOR_CAT,
:VALOR_REDESPACHO,
:VALOR_PEDAGIO,
:VALOR_GRIS,
:VALOR_AUTONOMO,
:VALOR_COLETA,
:VALOR_OUTROS,
:VALOR_PRESTACAO,
:VALOR_BASE_ICMS,
:ALIQUOTA_ICMS,
:VALOR_ICMS,
:ALIQUOTA_COFINS,
:ALIQUOTA_PIS,
:ALIQUOTA_IRPJ,
:ALIQUOTA_CSSL,
:ALIQUOTA_INSS,
:ALIQUOTA_DARF,
:ALIQUOTA_SUBSTITUICAO,
:ALIQUOTA_SERVICO,
:DATA_EMISSAO,
:HORA_EMISSAO,
:CALCULADO_ATE,
:CFOP,
:FATURADO_POR,
:VALOR_FAIXA_FRETE_PESO,
:CPF_MOTORISTA,
:PERCENTUAL_NOTAS,
:VALOR_DO_FRETE);

/* Inserir as informacoes do conhecimento em DADOS DO CONHECIMENTO */
/* Pegar o endereco do REMETENTE */
IF(:ID_END_REMETENTE=0) THEN
BEGIN
/* Pegar do proprio cadastro de clientes */
SELECT c.endereco,
c.bairro,
c.cidade,
c.uf,
c.cep
FROM clientes c
WHERE c.idcnpj_cpf=:REMETENTE
INTO :REMETENTE_ENDERECO,
:REMETENTE_BAIRRO,
:REMETENTE_CIDADE,
:REMETENTE_UF,
:REMETENTE_CEP;
END
ELSE
BEGIN
/* Pegar da tabela de enderecos adicionais */
SELECT e.endereco,
e.bairro,
e.cidade,
e.uf,
e.cep
FROM ENDERECOS_CLIENTES e
WHERE e.indice = :ID_END_REMETENTE
INTO :REMETENTE_ENDERECO,
:REMETENTE_BAIRRO,
:REMETENTE_CIDADE,
:REMETENTE_UF,
:REMETENTE_CEP ;

END

/* Pegar o endereco do DESTINATARIO */
IF(:ID_END_DESTINATARIO=0) THEN
BEGIN
/* Pegar do proprio cadastro de clientes */
SELECT c.endereco,
c.bairro,
c.cidade,
c.uf,
c.cep
FROM clientes c
WHERE c.idcnpj_cpf=:DESTINATARIO
INTO :DESTINATARIO_ENDERECO,
:DESTINATARIO_BAIRRO,
:DESTINATARIO_CIDADE,
:DESTINATARIO_UF,
:DESTINATARIO_CEP ;
END
ELSE
BEGIN
/* Pegar da tabela de enderecos adicionais */
SELECT e.endereco,
e.bairro,
e.cidade,
e.uf,
e.cep
FROM ENDERECOS_CLIENTES e
WHERE e.indice = :ID_END_DESTINATARIO
INTO :DESTINATARIO_ENDERECO,
:DESTINATARIO_BAIRRO,
:DESTINATARIO_CIDADE,
:DESTINATARIO_UF,
:DESTINATARIO_CEP ;
END

/* Pegar o endereco do TOMADOR DE SERVICO */
IF(:ID_END_TOMADOR=0) THEN
BEGIN
/* Pegar do proprio cadastro de clientes */
SELECT c.endereco,
c.bairro,
c.cidade,
c.uf,
c.cep
FROM clientes c
WHERE c.idcnpj_cpf=:TOMADOR
INTO :TOMADOR_ENDERECO,
:TOMADOR_BAIRRO,
:TOMADOR_CIDADE,
:TOMADOR_UF,
:TOMADOR_CEP ;
END
ELSE
BEGIN
/* Pegar da tabela de enderecos adicionais */
SELECT e.endereco,
e.bairro,
e.cidade,
e.uf,
e.cep
FROM ENDERECOS_CLIENTES e
WHERE e.indice = :ID_END_TOMADOR
INTO :TOMADOR_ENDERECO,
:TOMADOR_BAIRRO,
:TOMADOR_CIDADE,
:TOMADOR_UF,
:TOMADOR_CEP ;
END

/* Pegar o endereco do REDESPACHO */
IF(:ID_END_REDESPACHO=0) THEN
BEGIN
/* Pegar do proprio cadastro de clientes */
SELECT c.endereco,
c.bairro,
c.cidade,
c.uf,
c.cep
FROM clientes c
WHERE c.idcnpj_cpf=:REDESPACHO
INTO :REDESPACHO_ENDERECO,
:REDESPACHO_BAIRRO,
:REDESPACHO_CIDADE,
:REDESPACHO_UF,
:REDESPACHO_CEP ;
END
ELSE
BEGIN
/* Pegar da tabela de enderecos adicionais */
SELECT e.endereco,
e.bairro,
e.cidade,
e.uf,
e.cep
FROM ENDERECOS_CLIENTES e
WHERE e.indice = :ID_END_REDESPACHO
INTO :REDESPACHO_ENDERECO,
:REDESPACHO_BAIRRO,
:REDESPACHO_CIDADE,
:REDESPACHO_UF,
:REDESPACHO_CEP ;
END

SELECT c.razaosocial, c.idie_rg
FROM clientes c
WHERE c.idcnpj_cpf=:REMETENTE
INTO :REMETENTE_NOME, :REMETENTE_IE;

SELECT c.razaosocial, c.idie_rg
FROM clientes c
WHERE c.idcnpj_cpf=:DESTINATARIO
INTO :DESTINATARIO_NOME, :DESTINATARIO_IE;

SELECT c.razaosocial, c.idie_rg
FROM clientes c
WHERE c.idcnpj_cpf=:TOMADOR
INTO :TOMADOR_NOME, :TOMADOR_IE;

SELECT c.razaosocial, c.idie_rg
FROM clientes c
WHERE c.idcnpj_cpf=:REDESPACHO
INTO :REDESPACHO_NOME, :REDESPACHO_IE;

/* Inserir os dados coletados para o conhecimento */
INSERT INTO DADOS_CONHECIMENTO(CONHECIMENTO,
REMETENTE_NOME,
REMETENTE_ENDERECO,
REMETENTE_BAIRRO,
REMETENTE_CIDADE,
REMETENTE_UF,
REMETENTE_CEP,
REMETENTE_CNPJ_CPF,
REMETENTE_IE,
DESTINATARIO_NOME,
DESTINATARIO_ENDERECO,
DESTINATARIO_BAIRRO,
DESTINATARIO_CIDADE,
DESTINATARIO_UF,
DESTINATARIO_CEP,
DESTINATARIO_CNPJ_CPF,
DESTINATARIO_IE,
TOMADOR_NOME,
TOMADOR_ENDERECO,
TOMADOR_BAIRRO,
TOMADOR_CIDADE,
TOMADOR_UF,
TOMADOR_CEP,
TOMADOR_CNPJ_CPF,
TOMADOR_IE,
REDESPACHO_NOME,
REDESPACHO_ENDERECO,
REDESPACHO_BAIRRO,
REDESPACHO_CIDADE,
REDESPACHO_UF,
REDESPACHO_CEP,
REDESPACHO_CNPJ_CPF,
REDESPACHO_IE)
VALUES(:NUMERO,
:REMETENTE_NOME,
:REMETENTE_ENDERECO,
:REMETENTE_BAIRRO,
:REMETENTE_CIDADE,
:REMETENTE_UF,
:REMETENTE_CEP,
:REMETENTE,
:REMETENTE_IE,

:DESTINATARIO_NOME,
:DESTINATARIO_ENDERECO,
:DESTINATARIO_BAIRRO,
:DESTINATARIO_CIDADE,
:DESTINATARIO_UF,
:DESTINATARIO_CEP,
:DESTINATARIO,
:DESTINATARIO_IE,

:TOMADOR_NOME,
:TOMADOR_ENDERECO,
:TOMADOR_BAIRRO,
:TOMADOR_CIDADE,
:TOMADOR_UF,
:TOMADOR_CEP,
:TOMADOR,
:TOMADOR_IE,

:REDESPACHO_NOME,
:REDESPACHO_ENDERECO,
:REDESPACHO_BAIRRO,
:REDESPACHO_CIDADE,
:REDESPACHO_UF,
:REDESPACHO_CEP,
:REDESPACHO,
:REDESPACHO_IE);

/* Inserir os dados de quem esta pagando o frete */
INSERT INTO pagamento_fretes VALUES(:NUMERO, :TOMADOR, :TOMADOR_NOME
|| ' - ' || :TOMADOR, 0);

/* colocar o numero na variavel de saida */
conhecimento_gerado = :numero;

/* atualizar o numero do conhecimento no controle */
UPDATE CONTROLA_NUMEROS cn SET cn.conhecimento = :numero;
suspend;
end
^


SET TERM ; ^

Here is my stacktrace:
[java] org.firebirdsql.jdbc.FBSQLException: GDS Exception.
335544321. arithmetic exception, numeric overflow, or string truncation
[java] at
org.firebirdsql.jdbc.FBCachedFetcher.<init>(FBCachedFetcher.java:126)
[java] at
org.firebirdsql.jdbc.FBResultSet.<init>(FBResultSet.java:151)
[java] at
org.firebirdsql.jdbc.AbstractStatement.getCachedResultSet(AbstractStatement.java:565)
[java] at
org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:115)
[java] at
br.com.modulos.conhecimentos.setSalvarConhecimentoSP(conhecimentos.java:5709)
[java] at
br.com.modulos.conhecimentos.bConfirmarActionPerformed(conhecimentos.java:5795)
[java] at
br.com.modulos.conhecimentos.access$5200(conhecimentos.java:35)
[java] at
br.com.modulos.conhecimentos$72.actionPerformed(conhecimentos.java:3786)
[java] at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
[java] at
javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
[java] at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
[java] at
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
[java] at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
[java] at
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
[java] at java.awt.Component.processMouseEvent(Component.java:5100)
[java] at java.awt.Component.processEvent(Component.java:4897)
[java] at java.awt.Container.processEvent(Container.java:1569)
[java] at java.awt.Component.dispatchEventImpl(Component.java:3615)
[java] at java.awt.Container.dispatchEventImpl(Container.java:1627)
[java] at java.awt.Component.dispatchEvent(Component.java:3477)
[java] at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
[java] at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
[java] at
java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
[java] at java.awt.Container.dispatchEventImpl(Container.java:1613)
[java] at java.awt.Window.dispatchEventImpl(Window.java:1606)
[java] at java.awt.Component.dispatchEvent(Component.java:3477)
[java] at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
[java] at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
[java] at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
[java] at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
[java] at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
[java] at
java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
[java] at org.firebirdsql.gds.GDSException: arithmetic exception,
numeric overflow, or string truncation
[java] at
org.firebirdsql.jgds.GDS_Impl.readStatusVector(GDS_Impl.java:1759)
[java] at
org.firebirdsql.jgds.GDS_Impl.receiveResponse(GDS_Impl.java:1712)
[java] at
org.firebirdsql.jgds.GDS_Impl.isc_dsql_fetch(GDS_Impl.java:1076)
[java] at
org.firebirdsql.jca.FBManagedConnection.fetch(FBManagedConnection.java:801)
[java] at
org.firebirdsql.jdbc.AbstractConnection.fetch(AbstractConnection.java:945)
[java] at
org.firebirdsql.jdbc.FBCachedFetcher.<init>(FBCachedFetcher.java:63)
[java] at
org.firebirdsql.jdbc.FBResultSet.<init>(FBResultSet.java:151)
[java] at
org.firebirdsql.jdbc.AbstractStatement.getCachedResultSet(AbstractStatement.java:565)
[java] at
org.firebirdsql.jdbc.AbstractPreparedStatement.executeQuery(AbstractPreparedStatement.java:115)
[java] at
br.com.modulos.conhecimentos.setSalvarConhecimentoSP(conhecimentos.java:5709)
[java] at
br.com.modulos.conhecimentos.bConfirmarActionPerformed(conhecimentos.java:5795)
[java] at
br.com.modulos.conhecimentos.access$5200(conhecimentos.java:35)
[java] at
br.com.modulos.conhecimentos$72.actionPerformed(conhecimentos.java:3786)
[java] at
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
[java] at
javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
[java] at
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
[java] at
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
[java] at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
[java] at
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
[java] at java.awt.Component.processMouseEvent(Component.java:5100)
[java] at java.awt.Component.processEvent(Component.java:4897)
[java] at java.awt.Container.processEvent(Container.java:1569)
[java] at java.awt.Component.dispatchEventImpl(Component.java:3615)
[java] at java.awt.Container.dispatchEventImpl(Container.java:1627)
[java] at java.awt.Component.dispatchEvent(Component.java:3477)
[java] at
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
[java] at
java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
[java] at
java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
[java] at java.awt.Container.dispatchEventImpl(Container.java:1613)
[java] at java.awt.Window.dispatchEventImpl(Window.java:1606)
[java] at java.awt.Component.dispatchEvent(Component.java:3477)
[java] at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
[java] at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
[java] at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
[java] at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
[java] at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
[java] at
java.awt.EventDispatchThread.run(EventDispatchThread.java:100)