Rodrigo
Pra mim funcionou...direitinho,
eu apenas 'inventei' os dominios que voce nao havia passado na msg
e tirei o colate...pois na base de teste que criei eu nao o tinha
definido..rs..
de uma olhada no metada;
*******************
SET SQL DIALECT 3;
/* CREATE DATABASE 'c:\teste.fdb' PAGE_SIZE 4096
DEFAULT CHARACTER SET NONE */
/* Domain definitions */
CREATE DOMAIN D_CODIGO AS INTEGER NOT NULL;
CREATE DOMAIN D_CODPRODUTO AS INTEGER NOT NULL;
CREATE DOMAIN D_VALOR3 AS INTEGER NOT NULL;
/* Table: ESTOQUE, Owner: SYSDBA */
CREATE TABLE ESTOQUE
( CPRODUTO VARCHAR(15) NOT NULL,
CEMPRESA D_CODIGO,
EST_LOJA NUMERIC(18, 3) NOT NULL,
EST_DEPO NUMERIC(18, 3) DEFAULT 0 NOT NULL);
/* Table: PRODUTO, Owner: SYSDBA */
CREATE TABLE PRODUTO
( CPRODUTO VARCHAR(15) NOT NULL,
NPRODUTO VARCHAR(200) NOT NULL);
/* Table: REL_ESTOQUE, Owner: SYSDBA */
CREATE TABLE REL_ESTOQUE
( CPRODUTO D_CODPRODUTO,
D3 D_VALOR3,
L3 D_VALOR3,
D5 D_VALOR3,
L5 D_VALOR3,
D8 D_VALOR3,
L8 D_VALOR3,
D10 D_VALOR3,
L10 D_VALOR3);
COMMIT WORK;
SET AUTODDL OFF;
SET TERM !! ;
CREATE OR ALTER PROCEDURE GERAR_ESTOQUE_GERAL
( PEST_LOJA FLOAT,
PEST_DEPO FLOAT,
PCEMPRESA INTEGER,
PCPRODUTO VARCHAR(15))
AS
begin
/* CRIAR OS PRODUTOS NA TABELA DE REL_ESTOQUE */
for
select P.CProduto from PRODUTO P order by P.CProduto into :PCPRODUTO
do begin
insert into REL_ESTOQUE(CPRODUTO, D3, L3, D5, L5, D8, L8, L10, D10)
values(:PCPRODUTO, 0, 0, 0, 0, 0, 0, 0, 0);
end
/* select na tabela de estoque */
for
select E.* from ESTOQUE E order by E.CPRODUTO into :PCPRODUTO,
:PCEMPRESA, :PEST_LOJA, :PEST_DEPO
do begin
/* VERIFICAR SE EXISTE O PRODUTO, SEMPRE VAI EXISTIR, POIS INCLUO NA
PARTE DE CIMA */
if (exists (select RE.* from REL_ESTOQUE RE where RE.CPRODUTO =
:PCPRODUTO)) then
begin
/* VERIFICAR QUAL É A EMPRESA */
if (:PCEMPRESA = 3) then
begin
update REL_ESTOQUE set L3 = (L3 + :PEST_LOJA ), D3 = (D3 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
end
if (:PCEMPRESA = 5) then
begin
update REL_ESTOQUE set L5 = (L5 + :PEST_LOJA ), D5 = (D5 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
end
if (:PCEMPRESA = 8) then
begin
update REL_ESTOQUE set L8 = (L8 + :PEST_LOJA ), D8 = (D8 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
end
if (:PCEMPRESA = 10) then
begin
update REL_ESTOQUE set L10 = (L10 + :PEST_LOJA ), D10 = (D10 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
end
end
end
suspend;
END !!
SET TERM ; !!
COMMIT WORK;
SET AUTODDL ON;
/* Grant Roles for this database */
/* Grant permissions for this database */
*******************
Atenciosamente;
Elazar
-----Mensagem original-----
De: [email protected] [mailto:[EMAIL PROTECTED]
Em nome de Rodrigo - Winsoft
Enviada em: sexta-feira, 24 de fevereiro de 2006 09:46
Para: Lista - Delphi-br
Assunto: [delphi-br] ERRO NA SP - PRAZO DE ENTREGA EXPIRANDO !!!
BOM DIA GALERA...
TENHO AS SEGUINTES TABELAS:
CREATE TABLE PRODUTO (
CPRODUTO VARCHAR(15) NOT NULL COLLATE PXW_INTL850,
NPRODUTO VARCHAR(200) NOT NULL COLLATE PXW_INTL850
);
CREATE TABLE ESTOQUE (
CPRODUTO VARCHAR(15) NOT NULL COLLATE PXW_INTL850,
CEMPRESA D_CODIGO,
EST_LOJA NUMERIC(18,3) NOT NULL,
EST_DEPO NUMERIC(18,3) DEFAULT 0 NOT NULL
);
CREATE TABLE REL_ESTOQUE (
CPRODUTO D_CODPRODUTO,
D3 D_VALOR3, /* CORRESPONDE AO ESTOQUE DEPOSITO DA EMPRESA DE
COD. 3
L3 D_VALOR3, /* CORRESPONDE AO ESTOQUE LOJA DA EMPRESA DE
COD. 3
D5 D_VALOR3, /* CORRESPONDE AO ESTOQUE DEPOSITO DA EMPRESA DE
COD. 5
L5 D_VALOR3, /* CORRESPONDE AO ESTOQUE LOJA DA EMPRESA DE
COD. 5
D8 D_VALOR3, /* CORRESPONDE AO ESTOQUE DEPOSITO DA EMPRESA DE
COD. 8
L8 D_VALOR3, /* CORRESPONDE AO ESTOQUE LOJA DA EMPRESA DE
COD. 8
D10 D_VALOR3, /* CORRESPONDE AO ESTOQUE DEPOSITO DA EMPRESA DE
COD. 10
L10 D_VALOR3 /* CORRESPONDE AO ESTOQUE LOJA DA EMPRESA DE
COD. 10
);
estou criando a store procedure abaixo
CREATE PROCEDURE GERAR_ESTOQUE_GERAL (
PEST_LOJA FLOAT,
PEST_DEPO FLOAT,
PCEMPRESA INTEGER,
PCPRODUTO VARCHAR(15))
AS
begin
/* CRIAR OS PRODUTOS NA TABELA DE REL_ESTOQUE */
for
select P.CProduto from PRODUTO P order by P.CProduto into :PCPRODUTO
do begin
insert into REL_ESTOQUE(CPRODUTO, D3, L3, D5, L5, D8, L8, L10, D10)
values(:PCPRODUTO, 0, 0, 0, 0, 0, 0, 0, 0);
end
/* select na tabela de estoque */
for
select E.* from ESTOQUE E order by E.CPRODUTO into :PCPRODUTO,
:PCEMPRESA, :PEST_LOJA, :PEST_DEPO
do begin
/* VERIFICAR SE EXISTE O PRODUTO, SEMPRE VAI EXISTIR, POIS INCLUO NA
PARTE DE CIMA */
if (exists (select RE.* from REL_ESTOQUE RE where RE.CPRODUTO =
:PCPRODUTO)) then
begin
/* VERIFICAR QUAL É A EMPRESA */
if (:PCEMPRESA = 3) then
begin
update REL_ESTOQUE set L3 = (L3 + :PEST_LOJA ), D3 = (D3 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
end
if (:PCEMPRESA = 5) then
begin
update REL_ESTOQUE set L5 = (L5 + :PEST_LOJA ), D5 = (D5 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
end
if (:PCEMPRESA = 8) then
begin
update REL_ESTOQUE set L8 = (L8 + :PEST_LOJA ), D8 = (D8 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
end
if (:PCEMPRESA = 10) then
begin
update REL_ESTOQUE set L10 = (L10 + :PEST_LOJA ), D10 = (D10 +
:PEST_DEPO) where CPRODUTO = :PCPRODUTO;
end
end
end
suspend;
end
ESTA ME RETORNADO O SEGUINTE ERRO:
count of column list and variable list do not match.
Dynamic SQL Error.
SQL error code = -313.
count of column list and variable list do not match.
sERÁ Q ALGUEM SABE O Q ESTÁ ACONTECENDO...
SEI Q É MEIO COMPLICADO, MAS É UM POUCO URGENTE !!!
sE ALGUEM PUDER ME AJUDAR......
Obrigado.
Rodrigo Pedroso
Winsoft Informática - (14) 3664-1586
[EMAIL PROTECTED]
[As partes desta mensagem que não continham texto foram removidas]
--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
Yahoo! Grupos, um serviço oferecido por:
PUBLICIDADE
Links do Yahoo! Grupos
Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/
Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço
do Yahoo!.
_______________________________________________________
Yahoo! doce lar. Faça do Yahoo! sua homepage.
http://br.yahoo.com/homepageset.html
--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>
<*> Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages
<*> Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/
<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html