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: delphi-br@yahoogrupos.com.br [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