[firebase-br] apanhando de stored_procedure alguem pode me ajudar(2º tentativa)

Carlos Magno P Souza delphimagno em uol.com.br
Sáb Fev 7 12:08:57 -03 2009


Isto vai importar apenas 1 registro. Você deve executar esta procedure para 
cada registro da tabela STIHL. O While deve estar no aplicativo que chama a 
procedure.

if(Exists(select codigo from stihl where codigo = :codigo))then

  update produto set vlrvenda = : vlrvenda,

  descricao =:descricao

   where (codigo = :codigo);

    else

/*    insert into produto(codigo, descricao, vlrvenda) select codigo,
descricao, preco_venda
    from stihl; */

  INSERT INTO PRODUTO (CODIGO, DESCRICAO, VLRVENDA)
  VALUES (:CODIGO, :DESCRICAO,:VLR_VENDA)
/* OU ENTÃO
  INSERT INTO PRODUTO (CODIGO, DESCRICAO, VLRVENDA)
  SELECT CODIGO, DESCRICAO, VLRVENDA
  FROM STIHL
  WHERE CODIGO = :CODIGO
*/

Outra saída é fazer um loop dentro da procedure

FOR SELECT CODIGO, DESCRICAO, VLRVENDA  FROM STIHL
         INTO :CODIGO, :DESCRICAO, :VLRVENDA
         DO BEGIN
         -- e o código anterior ficaria aqui dentro

         END

----- Original Message ----- 
From: "Reijanio Nunes Ribeiro" <rnribeiro em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Saturday, February 07, 2009 9:36 AM
Subject: [firebase-br] apanhando de stored_procedure alguem pode me 
ajudar(2º tentativa)


bom dia

Alguem poderia me ajudar com essa procedure:

A logica seria assim importei uma tabela em txt com aproximadamente 6600
itens então tentei usar essa procedure da seguinte forma depois de baixar o
txt pra tabela temporária, executar a procedure que varreria a tabela de
produto sprocurando itens se achasse daria o update nos precos dos itens,
caso não encontrasse então começaria a inserir os mesmos, mais ta dando erro
podereiam me ajudar,

Acho que ta faltando um while ai mais não sei como implementa-lo no firebird
e não quero ter que fazer isso no delphi se puderem me ajudar ficarei grato,
obrigado



SET TERM ^ ;



CREATE PROCEDURE IMPORTAR (

    codigo integer,

    descricao varchar(200),

    vlrvenda double precision)

as

begin

  if(Exists(select codigo from stihl where codigo = :codigo))then

  update produto set vlrvenda = : vlrvenda,

  descricao =:descricao

   where (codigo = :codigo);

    else

    insert into produto(codigo, descricao, vlrvenda) select codigo,
descricao, preco_venda

    from stihl;

  /*suspend;*/

/*end^*/

  end^

SET TERM ; ^

Estrutura das tabelas

 CREATE TABLE PRODUTO (

    CODIGO        VARCHAR(18) NOT NULL,

    DESCRICAO     VARCHAR(200),

    VLRVENDA      DOUBLE PRECISION,
    IPI           numerIC
   CLASSFISCAL    VARCHAR(14)
   //retirei os outros campos pq o email anterior ficou aguardando aprovação
pois era muito grande

CREATE TABLE STIHL (

    CODIGO         VARCHAR(14) NOT NULL,

    DESCRICAO      VARCHAR(25),

    DESC_COMPLEM   VARCHAR(29),

    QTD_MIN        INTEGER,

    PRECO_VENDA    NUMERIC(15,5),

    COD_PROC       INTEGER,

    PERC_RED_ICMS  NUMERIC(2,0),

    PERC_IPI       NUMERIC(9,5),

    CLASS_FISCAL   INTEGER,

    MODELO         VARCHAR(130),

    HIERARQ_PROD   VARCHAR(18),

    TERMINADOR     CHAR(1),

    ALIQ_ECF       NUMERIC(2,0)

);
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista