[firebase-br] Stored Procedure

Junior mwd em onda.com.br
Sex Nov 11 14:55:19 -03 2005


Olá amigos.

Vou usar o e-mail do nosso amigo sobre SP.

Desenvolvi um sistema com Delphi e FireBird que está rodando numa empresa. Quando há necessidade de alterar alguma tabela utilizo 'Alter tabble....' / 'Create table....' e assim por diante.

No caso a baixo de uma SP eu posso fazer da seguinte forma:

QyAtualiza é minha query p/ atualização das tabelas

QyAtualiza.close;

QyAtualiza.sql.clear;

QyAtualiza.add('CREATE PROCEDURE CALC_CUSTO_PRODUTOS (');
QyAtualiza.add('WPRODUTO_ID INTEGER)');
QyAtualiza.add('RETURNS (');
QyAtualiza.add('WCUSTO NUMERIC(9,2))');
QyAtualiza.add('AS');
QyAtualiza.add('DECLARE VARIABLE WPRODUTO_ID2 INTEGER;');
QyAtualiza.add('DECLARE VARIABLE WCUSTOPARCIAL NUMERIC(9,2);');
QyAtualiza.add('DECLARE VARIABLE WICMS NUMERIC(9,2);');
QyAtualiza.add('DECLARE VARIABLE WMONTADO CHAR(1);');
QyAtualiza.add('DECLARE VARIABLE WFORNECEDOR_ID INTEGER;');
QyAtualiza.add('begin');
QyAtualiza.add('wCusto=0;');
QyAtualiza.add('Select montado, fornecedor_id from produtos where');
QyAtualiza.add('produtos.registro_id=:wproduto_id into :wmontado, :wfornecedor_id;');
QyAtualiza.add('-- Select fornecedor_id from produtos where');
QyAtualiza.add('produtos.registro_id=:wproduto_id into :wfornecedor_id;');
QyAtualiza.add('if (wMontado='F') then /* Se **** NÃO **** FOR UM PRODUTO MONTADO */');
QyAtualiza.add('begin');
QyAtualiza.add('select icms from agenda where');
QyAtualiza.add('agenda.registro_id=:wFornecedor_id into :wICMS;');
QyAtualiza.add('select Coalesce((valor_compra *');
QyAtualiza.add('(1-(:wICMS/100)))+(valor_Compra*(IPI/100)),0) from produtos');
QyAtualiza.add('where registro_id=:wproduto_id into wcusto;');
QyAtualiza.add('end');
QyAtualiza.add('if (wMontado='T') then /* Se **** FOR **** UM PRODUTO MONTADO */');
QyAtualiza.add('begin');
QyAtualiza.add('for Select produto_id, Coalesce((qtde * (Select wCusto');
QyAtualiza.add('from Calc_Custo_Produtos(romaneios.produto_id))),0)');
QyAtualiza.add('from romaneios where montagem_id=:wproduto_id');
QyAtualiza.add('into :wproduto_id2, :wcustoparcial');
QyAtualiza.add('do');
QyAtualiza.add('wcusto=:wcusto+:wcustoparcial;');
QyAtualiza.add('end');
QyAtualiza.add('suspend;');
QyAtualiza.add('end');

QyAtualiza.ExecSQL;



Mais detalhes sobre a lista de discussão lista