Procedure para INSERIR E SALVAR no firebird

09/08/2018

0

Olá galera, Boa Tarde! Então estou estudando para colocar a regra de negócio toda em procedure no entanto desde ontem que não consigo achar o erro: olha só como esta minha procedure:

create or alter procedure INSERTUPDATETBEMPRESAS (
PEM_ID IDS,
PEM_CODIGO TEXTO_EXTRA_CURTO,
PEM_RAZAO_SOCIAL TEXTO_GRANDE,
PEM_FANTASIA TEXTO_GRANDE,
PEM_CNPJ TEXTO_EXTRA_CURTO,
PEM_IE TEXTO_EXTRA_CURTO,
PEM_IM TEXTO_EXTRA_CURTO,
PEM_ALICOTA_ISS MONETARIO,
PEM_LOGRADOURO TEXTO_GRANDE,
PEM_CEP TEXTO_EXTRA_CURTO,
PEM_NUMERO TEXTO_EXTRA_CURTO,
PEM_COMPLEMENTO TEXTO_GRANDE,
PEM_CODIGO_CIDADE integer,
PEM_CIDADE TEXTO_GRANDE,
PEM_BAIRRO TEXTO_GRANDE,
PEM_UF varchar(2) character set WIN1252,
PEM_HOME TEXTO_GRANDE,
PEM_EMAIL TEXTO_GRANDE,
PEM_TELEFONE TEXTO_EXTRA_CURTO,
PEM_FAX TEXTO_EXTRA_CURTO,
PEM_LOGO TEXTO_GRANDE,
PEM_DESATIVADA BOOLEANO)
as
begin
if (EXISTS(SELECT EM_ID FROM tb_empresas WHERE (tb_empresas.em_id = :pem_id))) THEN
UPDATE TB_EMPRESAS Set
tb_empresas.em_codigo = :pem_codigo,
tb_empresas.em_razao_social = :pem_razao_social,
tb_empresas.em_fantasia = :pem_fantasia,
tb_empresas.em_cnpj = :pem_cnpj,
tb_empresas.em_ie = :pem_ie,
tb_empresas.em_im = :pem_im,
tb_empresas.em_alicota_iss = :pem_alicota_iss,
tb_empresas.em_logradouro = :pem_logradouro,
tb_empresas.em_cep = :pem_cep,
tb_empresas.em_numero = :pem_numero,
tb_empresas.em_complemento = :pem_complemento,
tb_empresas.em_codigo_cidade = :pem_codigo_cidade,
tb_empresas.em_cidade = :pem_cidade,
tb_empresas.em_bairro = :pem_bairro,
tb_empresas.em_uf = :pem_uf,
tb_empresas.em_home = :pem_home,
tb_empresas.em_email = :pem_email,
tb_empresas.em_telefone = :pem_telefone,
tb_empresas.em_fax = :pem_fax,
tb_empresas.em_logo = :pem_logo,
tb_empresas.em_desativada = :pem_desativada
WHERE tb_empresas.em_id = :pem_id;
else
INSERT INTO Tb_EMPRESAS
(tb_empresas.em_codigo,
tb_empresas.em_razao_social,
tb_empresas.em_fantasia,
tb_empresas.em_cnpj,
tb_empresas.em_ie,
tb_empresas.em_im,
tb_empresas.em_alicota_iss,
tb_empresas.em_logradouro,
tb_empresas.em_cep,
tb_empresas.em_numero,
tb_empresas.em_complemento,
tb_empresas.em_codigo_cidade,
tb_empresas.em_cidade,
tb_empresas.em_bairro,
tb_empresas.em_uf,
tb_empresas.em_home,
tb_empresas.em_email,
tb_empresas.em_telefone,
tb_empresas.em_fax,
tb_empresas.em_logo,
tb_empresas.em_desativada)
VALUES
(:pem_codigo,
:pem_razao_social,
:pem_fantasia,
:pem_cnpj,
:pem_ie,
:pem_im,
:pem_alicota_iss,
:pem_logradouro,
:pem_cep,
:pem_numero,
:pem_complemento,
:pem_codigo_cidade,
:pem_cidade,
:pem_bairro,
:pem_uf,
:pem_home,
:pem_email,
:pem_telefone,
:pem_fax,
:pem_logo,
:pem_desativada);
end

ao tentar executar a mesma

EXECUTE PROCEDURE INSERTUPDATETBEMPRESAS(null, '010203', 'THIAGO RAFAEL TEIXEIRA NOGUEIRA', 'TR SOFTWARES', '00.000.000/000.-00', '123',
'456',1.5, 'RUA JOSÉ ARAÚJO FREIRE', '58417-670', '88', 'CASA', null, 'CAMPINA GRANDE', 'PRESIDENTE MÉDICI', 'PB',
'http://www.trsoftwares.com.br', 'trthiagorafael@gmail.com', '(83)98712-7764', '(83)0000-0000', 'Logo.JPG', 'N')

dá a mensagem

can't format message 13:198 -- message file C:\\Windows\\firebird.msg not found.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.

Algum dos amigos poderiam me ajudar por gentileza
Thiago Nogueira

Thiago Nogueira

Responder

Posts

09/08/2018

Fernando Duwe

Olá Trs,

O que está acontecendo, é que durante o seu Insert, algum campo está ultrapassando o tamanho da tabela. Você pode enviar o script de criação da tabela, para poder analisar o tamanho dos campos?
Responder

09/08/2018

Thiago Nogueira

CREATE GENERATOR GEN_TB_EMPRESAS_ID;

CREATE TABLE TB_EMPRESAS (
EM_ID INTEGER NOT NULL,
EM_CODIGO TEXTO_EXTRA_CURTO /* TEXTO_EXTRA_CURTO = VARCHAR(15) */,
EM_RAZAO_SOCIAL TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_FANTASIA TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_CNPJ TEXTO_EXTRA_CURTO /* TEXTO_EXTRA_CURTO = VARCHAR(15) */,
EM_IE TEXTO_EXTRA_CURTO /* TEXTO_EXTRA_CURTO = VARCHAR(15) */,
EM_IM TEXTO_EXTRA_CURTO /* TEXTO_EXTRA_CURTO = VARCHAR(15) */,
EM_ALICOTA_ISS MONETARIO /* MONETARIO = NUMERIC(15,2) DEFAULT 0.00 NOT NULL */,
EM_LOGRADOURO TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_CEP TEXTO_EXTRA_CURTO /* TEXTO_EXTRA_CURTO = VARCHAR(15) */,
EM_NUMERO TEXTO_EXTRA_CURTO /* TEXTO_EXTRA_CURTO = VARCHAR(15) */,
EM_COMPLEMENTO TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_CODIGO_CIDADE INTEGER,
EM_CIDADE TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_BAIRRO TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_UF TIPO_UF DEFAULT 'PB' /* TIPO_UF = CHAR(2) NOT NULL CHECK (VALUE in ('AM', 'AC', 'RR', 'RO', 'AP', 'PA', 'MA', 'PI', 'CE',
'RN', 'PE', 'PB', 'AL', 'SE', 'MT', 'MS', 'GO', 'TO', 'BA', 'MG', 'ES', 'RJ',
'SP', 'PR', 'SC', 'RS', 'DF')) */,
EM_HOME TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_EMAIL TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_TELEFONE TEXTO_EXTRA_CURTO /* TEXTO_EXTRA_CURTO = VARCHAR(15) */,
EM_FAX TEXTO_EXTRA_CURTO /* TEXTO_EXTRA_CURTO = VARCHAR(15) */,
EM_LOGO TEXTO_GRANDE /* TEXTO_GRANDE = VARCHAR(250) */,
EM_DESATIVADA BOOLEANO /* BOOLEANO = VARCHAR(1) DEFAULT 'N' NOT NULL */
);




/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/

ALTER TABLE TB_EMPRESAS ADD CONSTRAINT PK_TB_EMPRESAS PRIMARY KEY (EM_ID);


/******************************************************************************/
/*** Indices ***/
/******************************************************************************/

CREATE INDEX INDX_CNPJ ON TB_EMPRESAS (EM_CNPJ);
CREATE INDEX INDX_CODIGO ON TB_EMPRESAS (EM_CODIGO);
CREATE INDEX INDX_FANTASIA ON TB_EMPRESAS (EM_FANTASIA);
CREATE INDEX INDX_RAZAO ON TB_EMPRESAS (EM_RAZAO_SOCIAL);


/******************************************************************************/
/*** Triggers ***/
/******************************************************************************/


SET TERM ^ ;



/******************************************************************************/
/*** Triggers for tables ***/
/******************************************************************************/



/* Trigger: TB_EMPRESAS_BI */
CREATE OR ALTER TRIGGER TB_EMPRESAS_BI FOR TB_EMPRESAS
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (new.em_id is null) then
new.em_id = gen_id(gen_tb_empresas_id,1);
end
^


SET TERM ; ^



/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
Responder

09/08/2018

Thiago Nogueira

Gente, baseado na dica do DUWE consegui encontrar o erro, estava no campo CNPJ que continha mais de 15 dígitos, aumentei para 20 e passou de boa
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