Fórum Execute Procedure com Erro #57198

06/11/2006

0

Pessoal, estou com uma grande dificuldade...

Tenho a Tabela:

CREATE TABLE PLANO_COMPRAS_PRE_2 (
COD_AREANEGOCIO CHAR(5),
EXERCICIO CHAR(5) NOT NULL,
CODIGO_MATPRIMA CHAR(5) NOT NULL,
JANEIRO FLOAT,
FEVEREIRO FLOAT,
MARCO FLOAT,
ABRIL FLOAT,
MAIO FLOAT,
JUNHO FLOAT,
JULHO FLOAT,
AGOSTO FLOAT,
SETEMBRO FLOAT,
OUTUBRO FLOAT,
NOVEMBRO FLOAT,
DEZEMBRO FLOAT
);

Tenho a procedure (que já funciona na minha aplicação) – então criei uma nova (adicionando as 2 ultima linha INSERT etc, etc,) com o objetivo de alimentar os 3 primeiros campo da tabela acima.

Ao executar a procedure me dá a seguinte mensagem:

Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.

Todos campos das tabelas envolvidas estão com o mesmo “tipo&8221; na procedure &8211; &8220;Division by Zero&8221; não pode ser pois não estou realizando operação de divisão na procedure &8211; e como falei a procedure já funciona sem a cláusula INSERT que adicionei no final...

Quem souber a solução desse problema por favor me ajude!!!

Segue procedure abaixo:

CREATE PROCEDURE ´PLANO_COMPRAS_6´
RETURNS (´COD_AREANEGOCIO´ CHAR(5),
´EXERCICIO´ CHAR(5),
´VERSAO´ VARCHAR(15),
´LOTEMINCOMPRA´ DECIMAL(10, 2),
´CODIGO_MATPRIMA´ CHAR(5) CHARACTER SET ASCII,
´DESC_MATPRIMA´ VARCHAR(25) CHARACTER SET ASCII,
´JANEIRO´ NUMERIC(15, 2),
´FEVEREIRO´ NUMERIC(15, 2),
´MARCO´ NUMERIC(15, 2),
´ABRIL´ NUMERIC(15, 2),
´MAIO´ NUMERIC(15, 2),
´JUNHO´ NUMERIC(15, 2),
´JULHO´ NUMERIC(15, 2),
´AGOSTO´ NUMERIC(15, 2),
´SETEMBRO´ NUMERIC(15, 2),
´OUTUBRO´ NUMERIC(15, 2),
´NOVEMBRO´ NUMERIC(15, 2),
´DEZEMBRO´ NUMERIC(15, 2))
AS
Declare Variable LOTEMINIMO DECIMAL(10,2);

Begin
FOR
SELECT C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA,
(SUM (C.JANEIRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JANEIRO,
(SUM (C.FEVEREIRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As FEVEREIRO,
(SUM (C.MARCO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MARCO,
(SUM (C.ABRIL_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As ABRIL,
(SUM (C.MAIO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MAIO,
(SUM (C.JUNHO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JUNHO,
(SUM (C.JULHO_MAT) +
´DESC_MATPRIMA´ VARCHAR(25) CHARACTER SET ASCII,
´JANEIRO´ NUMERIC(15, 2),
´FEVEREIRO´ NUMERIC(15, 2),
´MARCO´ NUMERIC(15, 2),
´ABRIL´ NUMERIC(15, 2),
´MAIO´ NUMERIC(15, 2),
´JUNHO´ NUMERIC(15, 2),
´JULHO´ NUMERIC(15, 2),
´AGOSTO´ NUMERIC(15, 2),
´SETEMBRO´ NUMERIC(15, 2),
´OUTUBRO´ NUMERIC(15, 2),
´NOVEMBRO´ NUMERIC(15, 2),
´DEZEMBRO´ NUMERIC(15, 2))
AS
Declare Variable LOTEMINIMO DECIMAL(10,2);

Begin
FOR
SELECT C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA,
(SUM (C.JANEIRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JANEIRO,
(SUM (C.FEVEREIRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As FEVEREIRO,
(SUM (C.MARCO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MARCO,
(SUM (C.ABRIL_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As ABRIL,
(SUM (C.MAIO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MAIO,
(SUM (C.JUNHO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JUNHO,
(SUM (C.JULHO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JULHO,
(SUM (C.AGOSTO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As AGOSTO,
(SUM (C.SETEMBRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As SETEMBRO,
(SUM (C.OUTUBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As OUTUBRO,
(SUM (C.NOVEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As NOVEMBRO,
(SUM (C.DEZEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As DEZEMBRO
FROM
EI_MAT_PRIMAS B,
MATERIAL_X_ESTRUTURA_7 C,
MATPRIMAS D,
REGRAS_NEGOCIOS_2 E
WHERE
C.COD_AREANEGOCIO = B.CODAREANEGOCIO AND
C.EXERCICIO = B.EXERCICIO AND
C.CODIGO_MATPRIMA = B.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = D.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = E.CODIGO_MATPRIMA
Group by
C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA, E.ESTQMINIMO, B.VOLUME_INICIAL,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA
into
:LOTEMINIMO, :COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :CODIGO_MATPRIMA,:DESC_MATPRIMA,
:JANEIRO, :FEVEREIRO, :MARCO, :ABRIL, :MAIO, :JUNHO, :JULHO, :AGOSTO,
:SETEMBRO, :OUTUBRO, :NOVEMBRO,E.ESTQMINIMO - B.VOLUME_INICIAL ) As JULHO,
(SUM (C.AGOSTO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As AGOSTO,
(SUM (C.SETEMBRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As SETEMBRO,
(SUM (C.OUTUBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As OUTUBRO,
(SUM (C.NOVEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As NOVEMBRO,
(SUM (C.DEZEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As DEZEMBRO
FROM
EI_MAT_PRIMAS B,
MATERIAL_X_ESTRUTURA_7 C,
MATPRIMAS D,
REGRAS_NEGOCIOS_2 E
WHERE
C.COD_AREANEGOCIO = B.CODAREANEGOCIO AND
C.EXERCICIO = B.EXERCICIO AND
C.CODIGO_MATPRIMA = B.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = D.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = E.CODIGO_MATPRIMA
Group by
C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA, E.ESTQMINIMO, B.VOLUME_INICIAL,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA
into
:LOTEMINIMO, :COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :CODIGO_MATPRIMA,:DESC_MATPRIMA,
:JANEIRO, :FEVEREIRO, :MARCO, :ABRIL, :MAIO, :JUNHO, :JULHO, :AGOSTO,
:SETEMBRO, :OUTUBRO, :NOVEMBRO, :DEZEMBRO
Do
begin
IF (:LOTEMINIMO IS NULL) then LOTEMINIMO = 0;
IF (:LOTEMINIMO > :JANEIRO) then JANEIRO = LOTEMINIMO;
IF (:LOTEMINIMO > :FEVEREIRO) then FEVEREIRO = LOTEMINIMO;
IF (:LOTEMINIMO > :MARCO) then MARCO = LOTEMINIMO;
IF (:LOTEMINIMO > :ABRIL) then ABRIL = LOTEMINIMO;
IF (:LOTEMINIMO > :MAIO) then MAIO = LOTEMINIMO;
IF (:LOTEMINIMO > :JUNHO) then JUNHO = LOTEMINIMO;
IF (:LOTEMINIMO > :JULHO) then JULHO = LOTEMINIMO;
IF (:LOTEMINIMO > :AGOSTO) then AGOSTO = LOTEMINIMO;
IF (:LOTEMINIMO > :SETEMBRO) then SETEMBRO = LOTEMINIMO;
IF (:LOTEMINIMO > :OUTUBRO) then OUTUBRO = LOTEMINIMO;
IF (:LOTEMINIMO > :NOVEMBRO) then NOVEMBRO = LOTEMINIMO;
IF (:LOTEMINIMO > :DEZEMBRO) then DEZEMBRO = LOTEMINIMO;
INSERT INTO PLANO_COMPRAS_PRE_2 (COD_AREANEGOCIO, EXERCICIO, CODIGO_MATPRIMA)
VALUES (:COD_AREANEGOCIO, :EXERCICIO, :CODIGO_MATPRIMA);
SUSPEND;
End
End


Osvaldo Modesto

Osvaldo Modesto

Responder

Posts

06/11/2006

Osvaldo Modesto

De novo , veio errado...

A procedure só tem um bloco com sentença ´FROM´ - No minha procedure dou um CTRL C para copiar e um CTRL V para colar nesta página e vem ´duplicado´ - de qq. maneira que eu faça!!!

Se alguém puder - mesmo assim analisar a procedure (desconsiderar o segundo bloco FROM) e descobrir qual o erro da procedure - eu agradeço muito.... de coração!!!

Muitissimo Obrigado a Todos


Responder

Gostei + 0

06/11/2006

Cabelo

Colega..

mude esta linha

 "CODIGO_MATPRIMA" CHAR(5) CHARACTER SET ASCII, 


para

 "CODIGO_MATPRIMA" CHAR(5), 


e veja se dá certo..

acho que você está especificando um character set na procedure e nenhum na tabela..

tem que ver na sua conexão como está configurado..

um abraço..


Responder

Gostei + 0

06/11/2006

Cabelo

Colega..

mude esta linha

 "CODIGO_MATPRIMA" CHAR(5) CHARACTER SET ASCII, 


para

 "CODIGO_MATPRIMA" CHAR(5), 


e veja se dá certo..

acho que você está especificando um character set na procedure e nenhum na tabela..

tem que ver na sua conexão como está configurado..

um abraço..


Responder

Gostei + 0

06/11/2006

Osvaldo Modesto

Vlw Cabelo - Vou testar á noite!!

Muito Obrigado,


Responder

Gostei + 0

06/11/2006

Acacio

Olha este código que postei abaixo funciona, mas é um código antigo, não sei o que tu colocasse a mais;

É só explicar o que tu colocasse a mais, o que o tipo do campo;

CREATE OR ALTER PROCEDURE PLANO_COMPRAS
RETURNS (
COD_AREANEGOCIO CHAR(5),
EXERCICIO CHAR(5),
VERSAO VARCHAR(15),
LOTEMINCOMPRA NUMERIC(15,2),
CODIGO_MATPRIMA CHAR(5),
DESC_MATPRIMA VARCHAR(25),
JANEIRO NUMERIC(15,2),
FEVEREIRO NUMERIC(15,2),
MARCO NUMERIC(15,2),
ABRIL NUMERIC(15,2),
MAIO NUMERIC(15,2),
JUNHO NUMERIC(15,2),
JULHO NUMERIC(15,2),
AGOSTO NUMERIC(15,2),
SETEMBRO NUMERIC(15,2),
OUTUBRO NUMERIC(15,2),
NOVEMBRO NUMERIC(15,2),
DEZEMBRO NUMERIC(15,2))
AS
Declare Variable LOTEMINIMO DECIMAL(10,2);
Begin
FOR
SELECT C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, A.LOTEMINCOMPRA,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA,
(SUM (C.JANEIRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As JANEIRO,
(SUM (C.FEVEREIRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As FEVEREIRO,
(SUM (C.MARCO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As MARCO,
(SUM (C.ABRIL_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As ABRIL,
(SUM (C.MAIO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As MAIO,
(SUM (C.JUNHO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As JUNHO,
(SUM (C.JULHO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As JULHO,
(SUM (C.AGOSTO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As AGOSTO,
(SUM (C.SETEMBRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As SETEMBRO,
(SUM (C.OUTUBRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As OUTUBRO,
(SUM (C.NOVEMBRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As NOVEMBRO,
(SUM (C.DEZEMBRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As DEZEMBRO
FROM REGRAS_NEGOCIOS_2 A
JOIN EI_MAT_PRIMAS B ON A.CODIGO_MATPRIMA = B.CODIGO_MATPRIMA
JOIN MATERIAL_X_ESTRUTURA_5 C ON A.CODIGO_MATPRIMA = C.CODIGO_MATPRIMA
JOIN MATPRIMAS D ON A.CODIGO_MATPRIMA = D.CODIGO_MATPRIMA
Group by
C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, A.LOTEMINCOMPRA,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA
into
:COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :LOTEMINIMO, :CODIGO_MATPRIMA,
:DESC_MATPRIMA, :JANEIRO, :FEVEREIRO, :MARCO, :ABRIL, :MAIO, :JUNHO,
:JULHO, L )) As FEVEREIRO,
(SUM (C.MARCO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As MARCO,
(SUM (C.ABRIL_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As ABRIL,
(SUM (C.MAIO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As MAIO,
(SUM (C.JUNHO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As JUNHO,
(SUM (C.JULHO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As JULHO,
(SUM (C.AGOSTO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As AGOSTO,
(SUM (C.SETEMBRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As SETEMBRO,
(SUM (C.OUTUBRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As OUTUBRO,
(SUM (C.NOVEMBRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As NOVEMBRO,
(SUM (C.DEZEMBRO_MAT + A.ESTQMINIMO - B.VOLUME_INICIAL )) As DEZEMBRO
FROM REGRAS_NEGOCIOS_2 A
JOIN EI_MAT_PRIMAS B ON A.CODIGO_MATPRIMA = B.CODIGO_MATPRIMA
JOIN MATERIAL_X_ESTRUTURA_5 C ON A.CODIGO_MATPRIMA = C.CODIGO_MATPRIMA
JOIN MATPRIMAS D ON A.CODIGO_MATPRIMA = D.CODIGO_MATPRIMA
Group by
C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, A.LOTEMINCOMPRA,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA
into
:COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :LOTEMINIMO, :CODIGO_MATPRIMA,
:DESC_MATPRIMA, :JANEIRO, :FEVEREIRO, :MARCO, :ABRIL, :MAIO, :JUNHO,
:JULHO, :AGOSTO, :SETEMBRO, :OUTUBRO, :NOVEMBRO, :DEZEMBRO
Do
begin
IF (:LOTEMINIMO IS NULL) then LOTEMINIMO = 0;
IF (:LOTEMINIMO > :JANEIRO) then JANEIRO = LOTEMINIMO;
IF (:LOTEMINIMO > :FEVEREIRO) then FEVEREIRO = LOTEMINIMO;
IF (:LOTEMINIMO > :MARCO) then MARCO = LOTEMINIMO;
IF (:LOTEMINIMO > :ABRIL) then ABRIL = LOTEMINIMO;
IF (:LOTEMINIMO > :MAIO) then MAIO = LOTEMINIMO;
IF (:LOTEMINIMO > :JUNHO) then JUNHO = LOTEMINIMO;
IF (:LOTEMINIMO > :JULHO) then JULHO = LOTEMINIMO;
IF (:LOTEMINIMO > :AGOSTO) then AGOSTO = LOTEMINIMO;
IF (:LOTEMINIMO > :SETEMBRO) then SETEMBRO = LOTEMINIMO;
IF (:LOTEMINIMO > :OUTUBRO) then OUTUBRO = LOTEMINIMO;
IF (:LOTEMINIMO > :NOVEMBRO) then NOVEMBRO = LOTEMINIMO;
IF (:LOTEMINIMO > :DEZEMBRO) then DEZEMBRO = LOTEMINIMO;
SUSPEND;
End
End


Responder

Gostei + 0

07/11/2006

Osvaldo Modesto

Cabelo:

Tentei sem o Character Set ASCII - continua com a mesma mensagem...

Acácio:

Acho que o seu texto tbm veio duplicado em alguns trechos... Mas dá pra depurar. O interessante é que vc. está usando JOIN nessa procedure. Tenho uma outra versão dessa procedure (igualzinha) - apenas sem o INSERT das ultimas 2 linhas - e funciona uma beleza!!!

De qq. maneira vou testar

Muitos Obrigado a vocês pela ajuda!!

Qq. problema volto a falar
Abraço a Todos


Responder

Gostei + 0

07/11/2006

Osvaldo Modesto

Acacio,

Sua procedure veio sem a sentença INSERT...

Sds.,


Responder

Gostei + 0

07/11/2006

Osvaldo Modesto

Acacio,

Sua procedure veio sem a sentença INSERT...

Sds.,


Responder

Gostei + 0

07/11/2006

Cabelo

Colega..

Você tem o seguinte problema..

CREATE PROCEDURE "PLANO_COMPRAS_6"
RETURNS ("COD_AREANEGOCIO" CHAR(5),
"EXERCICIO" CHAR(5),
"VERSAO" VARCHAR(15),
"LOTEMINCOMPRA" DECIMAL(10, 2),
"CODIGO_MATPRIMA" CHAR(5) CHARACTER SET ASCII,
"DESC_MATPRIMA" VARCHAR(25) CHARACTER SET ASCII,
"JANEIRO" NUMERIC(15, 2),
"FEVEREIRO" NUMERIC(15, 2),
"MARCO" NUMERIC(15, 2),
"ABRIL" NUMERIC(15, 2),
"MAIO" NUMERIC(15, 2),
"JUNHO" NUMERIC(15, 2),
"JULHO" NUMERIC(15, 2),
"AGOSTO" NUMERIC(15, 2),
"SETEMBRO" NUMERIC(15, 2),
"OUTUBRO" NUMERIC(15, 2),
"NOVEMBRO" NUMERIC(15, 2),
"DEZEMBRO" NUMERIC(15, 2))
AS
Declare Variable LOTEMINIMO DECIMAL(10,2); 
Begin
FOR
SELECT C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA,
(SUM (C.JANEIRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JANEIRO,
(SUM (C.FEVEREIRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As FEVEREIRO,
(SUM (C.MARCO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MARCO,
(SUM (C.ABRIL_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As ABRIL,
(SUM (C.MAIO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MAIO,
(SUM (C.JUNHO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JUNHO,
(SUM (C.JULHO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JULHO,
(SUM (C.AGOSTO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As AGOSTO,
(SUM (C.SETEMBRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As SETEMBRO,
(SUM (C.OUTUBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As OUTUBRO,
(SUM (C.NOVEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As NOVEMBRO,
(SUM (C.DEZEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As DEZEMBRO
FROM
EI_MAT_PRIMAS B,
MATERIAL_X_ESTRUTURA_7 C,
MATPRIMAS D,
REGRAS_NEGOCIOS_2 E
WHERE
C.COD_AREANEGOCIO = B.CODAREANEGOCIO AND
C.EXERCICIO = B.EXERCICIO AND
C.CODIGO_MATPRIMA = B.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = D.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = E.CODIGO_MATPRIMA
Group by
C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA, E.ESTQMINIMO, B.VOLUME_INICIAL,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA
into
:COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :LOTEMINIMO, :CODIGO_MATPRIMA,(SUM (C.MARCO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MARCO,
(SUM (C.ABRIL_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As ABRIL,
(SUM (C.MAIO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MAIO,
(SUM (C.JUNHO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JUNHO,
(SUM (C.JULHO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JULHO,
(SUM (C.AGOSTO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As AGOSTO,
(SUM (C.SETEMBRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As SETEMBRO,
(SUM (C.OUTUBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As OUTUBRO,
(SUM (C.NOVEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As NOVEMBRO,
(SUM (C.DEZEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As DEZEMBRO
FROM
EI_MAT_PRIMAS B,
MATERIAL_X_ESTRUTURA_7 C,
MATPRIMAS D,
REGRAS_NEGOCIOS_2 E
WHERE
C.COD_AREANEGOCIO = B.CODAREANEGOCIO AND
C.EXERCICIO = B.EXERCICIO AND
C.CODIGO_MATPRIMA = B.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = D.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = E.CODIGO_MATPRIMA
Group by
C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA, E.ESTQMINIMO, B.VOLUME_INICIAL,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA
into
:COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :LOTEMINIMO, :CODIGO_MATPRIMA,:DESC_MATPRIMA,
:JANEIRO¬MINIMO - B.VOLUME_INICIAL ) As MARCO,
(SUM (C.ABRIL_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As ABRIL,
(SUM (C.MAIO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MAIO,
(SUM (C.JUNHO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JUNHO,
(SUM (C.JULHO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JULHO,
(SUM (C.AGOSTO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As AGOSTO,
(SUM (C.SETEMBRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As SETEMBRO,
(SUM (C.OUTUBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As OUTUBRO,
(SUM (C.NOVEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As NOVEMBRO,
(SUM (C.DEZEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As DEZEMBRO
FROM
EI_MAT_PRIMAS B,
MATERIAL_X_ESTRUTURA_7 C,
MATPRIMAS D,
REGRAS_NEGOCIOS_2 E
WHERE
C.COD_AREANEGOCIO = B.CODAREANEGOCIO AND
C.EXERCICIO = B.EXERCICIO AND
C.CODIGO_MATPRIMA = B.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = D.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = E.CODIGO_MATPRIMA
Group by
C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA, E.ESTQMINIMO, B.VOLUME_INICIAL,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA
into
:COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :LOTEMINIMO, :CODIGO_MATPRIMA#ADESC_MATPRIMA,
:JANEIRO¬MINIMO - B.VOLUME_INICIAL ) As MARCO,
(SUM (C.ABRIL_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As ABRIL,
(SUM (C.MAIO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As MAIO,
(SUM (C.JUNHO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JUNHO,
(SUM (C.JULHO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As JULHO,
(SUM (C.AGOSTO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As AGOSTO,
(SUM (C.SETEMBRO_MAT) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As SETEMBRO,
(SUM (C.OUTUBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As OUTUBRO,
(SUM (C.NOVEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As NOVEMBRO,
(SUM (C.DEZEMBRO_MAT ) + E.ESTQMINIMO - B.VOLUME_INICIAL ) As DEZEMBRO
FROM
EI_MAT_PRIMAS B,
MATERIAL_X_ESTRUTURA_7 C,
MATPRIMAS D,
REGRAS_NEGOCIOS_2 E
WHERE
C.COD_AREANEGOCIO = B.CODAREANEGOCIO AND
C.EXERCICIO = B.EXERCICIO AND
C.CODIGO_MATPRIMA = B.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = D.CODIGO_MATPRIMA AND
C.CODIGO_MATPRIMA = E.CODIGO_MATPRIMA
Group by
C.COD_AREANEGOCIO, C.EXERCICIO, C.VERSAO, E.LOTEMINCOMPRA, E.ESTQMINIMO, B.VOLUME_INICIAL,
D.CODIGO_MATPRIMA, D.DESC_MATPRIMA
into
:COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :LOTEMINIMO, :CODIGO_MATPRIMA,:DESC_MATPRIMA,
:JANEIRO, :FEVEREIRO, :MARCO, :ABRIL, :MAIO, :JUNHO, :JULHO, :AGOSTO, :SETEMBRO, :OUTUBRO, :NOVEMBRO, :DEZEMBRO


Percebe que alterei a posição em que você está dando o ´into´, assim deve funcionar, pois você está tentando inserir um campo numérico em uma string..

INSERT INTO PLANO_COMPRAS_PRE_2 (COD_AREANEGOCIO, EXERCICIO, CODIGO_MATPRIMA)
VALUES (:COD_AREANEGOCIO, :EXERCICIO, :CODIGO_MATPRIMA);
SUSPEND;
End
End


O insert permanece igual..

Altere isso em sua procedure.. que deve funcionar..

e acredito que deve ser nos dois for select.. já que está um pouco confuso para a visualização..

mas altere a posição dos parâmetros que vai funcionar..

um abraço..


Responder

Gostei + 0

07/11/2006

Osvaldo Modesto

Cabelo, Valeu!!!

Vou testar - depois te falo....

Muito Obrigado,


Responder

Gostei + 0

08/11/2006

Osvaldo Modesto

Cabelo, Bom dia!!

Acho que conseguimos dar + 1 passo, Mas ainda estou com problema...

Mudei a posição do campos na sentença INTO: conf. abaixo

into
:COD_AREANEGOCIO, :EXERCICIO, :VERSAO, :LOTEMINIMO, :CODIGO_MATPRIMA, :DESC_MATPRIMA,
:JANEIRO, :FEVEREIRO, :MARCO, :ABRIL, :MAIO, :JUNHO, :JULHO, :AGOSTO,
:SETEMBRO, :OUTUBRO, :NOVEMBRO, :DEZEMBRO

Então mandei executar EXECUTE PROCEDURE -

A procedure rodou - maravilha - deu a msg. de execução com sucesso abaixo:

1 record(s) was(were) inserted into PLANO_COMPRAS_PRE_2

------ Performance info ------
Prepare time = 0ms
Execute time = 16ms
Current memory = 3.069.952
Max memory = 3.614.160
Memory buffers = 2.048
Reads from disk to cache = 9
Writes from cache to disk = 2
Fetches from cache = 604

Procedure executing results:

COD_AREANEGOCIO = 12122
EXERCICIO = 2006
VERSAO = PROVAVEL
LOTEMINCOMPRA =
CODIGO_MATPRIMA = 18056
DESC_MATPRIMA = Tarugo de Bronze
JANEIRO = 1200
FEVEREIRO = 1200
MARCO = 1200
ABRIL = 1200
MAIO = 1200
JUNHO = 1200
JULHO = 1200
AGOSTO = 1200
SETEMBRO = 1200
OUTUBRO = 1200
NOVEMBRO = 1200
DEZEMBRO = 1200

Então verifiquei que só 1 item foi transferido para a Tabela_Compras_Precos (que é o objetivo) - Mandei rodar de novo -

E deu a msg. erro:

Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint ´INTEG_1242´ on table ´PLANO_COMPRAS_PRE_2´.

EDURE -

A procedure rodou - maravilha - deu a msg. de execução com sucesso abaixo:

1 record(s) was(were) inserted into PLANO_COMPRAS_PRE_2

------ Performance info ------
Prepare time = 0ms
Execute time = 16ms
Current memory = 3.069.952
Max memory = 3.614.160
Memory buffers = 2.048
Reads from disk to cache = 9
Writes from cache to disk = 2
Fetches from cache = 604

Procedure executing results:

COD_AREANEGOCIO = 12122
EXERCICIO = 2006
VERSAO = PROVAVEL
LOTEMINCOMPRA =
CODIGO_MATPRIMA = 18056
DESC_MATPRIMA = Tarugo de Bronze
JANEIRO = 1200
FEVEREIRO = 1200
MARCO = 1200
ABRIL = 1200
MAIO = 1200
JUNHO = 1200
JULHO = 1200
AGOSTO = 1200
SETEMBRO = 1200
OUTUBRO = 1200
NOVEMBRO = 1200
DEZEMBRO = 1200

Então verifiquei que só 1 item foi transferido para a Tabela_Compras_Precos (que é o objetivo) - Mandei rodar de novo -

E deu a msg. erro:

Invalid insert or update value(s): object columns are
constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint ´INTEG_1242´ on table ´PLANO_COMPRAS_PRE_2´.

E daí pra frente, não consigo mais executar essa procedure....

O que está acontecendo ??

Mais uma vez, agradeço muito a sua ajuda!!

Muito Obrigado,


Responder

Gostei + 0

08/11/2006

Cabelo

Colega..

Este erro deveria mesmo existir, já que voc~e está tentando inserir um registro duplicado..

Não entendí sua dúvida.. voc~e tem que tentar dar o select por fora da procedure e ver o que ela tras.. o(s) insert(s) depende(m) do número de registros que o select tras..

Rode o select fora da procedure e confirme.. se tiver mais que uma linha de registro, o problema está na posição do insert..

se depois que você der o select e verificar que está trazendo mais que um registro, então me manda um mail com sua procedure cabelo_uni@hotmail.com pois aqui no fórum, está ocorrendo um erro.. duplicando a mensagem e está confuso e difícil entender sua procedure..

um abraço..

Junior


Responder

Gostei + 0

08/11/2006

Osvaldo Modesto

Cabelo, Obrigado pelo retorno...

É isso aí, vc. está certo...

Eu não havia me dando conta ainda é que o campo COD_MATPRIMA está embutido em vários ´produtos´ - Qdo. eu rodo a procedure sem os INSERT funciona por qie COD_MATRIMA não é chave primária. Mas na Tabela de Preços que recebe as informaçôes, esse campo é chave primária -

Bem, Ainda não fiz o teste que vc. pediy, mas com certeza o problema é esse...

Podemos colocar uma condição na procedure para pegar os codigos desse campo uma só vez ??

Obrigado,
Grande Abraço,


Responder

Gostei + 0

08/11/2006

Cabelo

[quote:67b8042dba=´Osvaldo Modesto´]Cabelo, Obrigado pelo retorno...

É isso aí, vc. está certo...

Eu não havia me dando conta ainda é que o campo COD_MATPRIMA está embutido em vários ´produtos´ - Qdo. eu rodo a procedure sem os INSERT funciona por qie COD_MATRIMA não é chave primária. Mas na Tabela de Preços que recebe as informaçôes, esse campo é chave primária -

Bem, Ainda não fiz o teste que vc. pediy, mas com certeza o problema é esse...

Podemos colocar uma condição na procedure para pegar os codigos desse campo uma só vez ??

Obrigado,
Grande Abraço,[/quote:67b8042dba]

Osvaldo..

É o seguinte..

Sempre que vou criar uma procedure eu sempre utilizo ou melhor eu sempre crio os selects fora da procedure.. quando os selects estão me retornando o desejado eu crio a procedure..

como te disse anteriormente, na postagem da sua mensagem original, ficou tudo muito confuso e não sei ao certo te dizer como fazer o select, na verdade eu até conseguiria.. mas me falta tempo de rever a mensagem e guardar somente o que preciso.. mas vamos faer assim :

Tenta realizar o select fora da procedure e quando obter o resultado que está busacndo coloque na procedure.. se precisar de ajuda com o select poste SOMENTE o select que te ajudo.. certo??

um abarço..


Responder

Gostei + 0

10/11/2006

Osvaldo Modesto

Cabelo, Bom dia!!

Vc. recebeu meu e-Mail ??
Não sei se vc. entendeu bem o que eu quis dizer...
Mas o problema é exatamente aquele que estou expondo
Qq. dúvida é só falar

Muito Obrigado!!!


Responder

Gostei + 0

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

Aceitar