Fórum Store Procedure meio complicada! #39306

09/10/2003

0

Olá amigos,
tenho que fazer o seguinte:
Tenho 4 tabelas:

Tabela A
cod_cliente
nome

Tabela B
cod_cliente
cod_produto

Tabela C
cod_produto
descricao

Tabela D
cod_produto
rev
custo

Depois de fazer uma busca por cod_produto, tenho que jogar o resultado num DBGRID com as seguintes colunas:

nome cod_produto descricao rev custo

Agora tenho algumas dúvidas:
- É melhor eu criar uma Store Procedure para realizar este trabalho para mim? Se for, como ficaria a SP?
- Depois de criada, como faço para chama-la em meu sistema?

muito obrigado pela atenção.


Anarchybra

Anarchybra

Responder

Posts

09/10/2003

Afarias

acho q um SELECT como abaixo resolve::

select a.nome, c.cod_produto, c.descricao, d.rev, d.custo
from tabela_a a, tabela_b b, tabela_c c
where a.cod_cliente = b.cod_cliente
and b.cod_produto = c.cod_produto
and d.cod_produto = b.cod_produto

ou

select a.nome, c.cod_produto, c.descricao, d.rev, d.custo
from tabela_a a
inner join tabela_b b on (b.cod_cliente = a.cod_cliente)
inner join tabela_c c on (c.cod_produto = b.cod_produto)
inner join tabela_d d on (d.cod_produto = c.cod_produto)


T+


Responder

Gostei + 0

10/10/2003

Anarchybra

Mais uma vez, muito obrigado Afarias.
Sem querer incomodar, poderia tirar uma outra dúvida?
Tenho que calcular o campo d.rev que é do tipo NUMERIC.
como faço para desse número subtrair 2,20, ou seja:
d.rev - 2,20

Muito obrigado novamente.


Responder

Gostei + 0

10/10/2003

Afarias

|como faço para desse número subtrair 2,20, ou seja: d.rev - 2,20

faça a operação normalmente. só lembre q o separador decimal é ponto (.) e não vírgula::


select a.nome, c.cod_produto, c.descricao, (d.rev - 2.20) as rev, d.custo
{...}


T+


Responder

Gostei + 0

10/10/2003

Edison_br

vc tambem pode criar uma View.
Geralmente se utiliza stored procedure qdo vc quer retornar algum valor ex: Um novo código, Total de um pedido ou para fazer algum calculo.


Responder

Gostei + 0

13/10/2003

Anarchybra

Muito obrigado pela ajuda amigos Afarias e Edison_br.
Vocês poderiam me ajudar com uma última dúvida?
Como faço para formatar um campo no select?
Por exemplo, eu tenho o seguinte:
select a.nome,c.cod_produto, c.descricao, d.revisao, d.custo, ((d.custo / 2.20)*100-100) from a,c,d
mas ele me volta números como 1,239923445322...
como faço para formatar este resultado com apenas duas casas decimais neste select?

Muito obrigado mais uma vez.


Responder

Gostei + 0

13/10/2003

Anarchybra

Valeu amigos...
eu já consegui... pura besteira minha.... esqueci do DisplayFormat.


Responder

Gostei + 0

13/10/2003

Edison_br

desculpe a demora mas se eu entendi algo assim ou parecido com isto deve funcionar.
select a.nome,c.cod_produto, c.descricao, d.revisao, d.custo,
cast(((d.custo / 2.20)*100-100) as numeric(8,2)) from a,c,d

att Edison


Responder

Gostei + 0

15/10/2003

Anarchybra

Olá amigos,
me surgiu uma outra dúvida....
eu tenho várias alterações no campo c.cod_produto, que são como atualizações. A atualização que vale realmente, a atual, é sempre a maior.
Por exemplo: atualização 1,2,3 a atual será a 3.
o campo atualização esta na tabela B e quando eu fazer a consulta pelo cod_produto ele terá que trazer apenas a última atualização.
Exemplo:
produto 1 atualização 1
produto 1 atualização 2
.................................
eu preciso que ele só me traga:
produto 1 atualização 2

eu tentei usar o MAX mas acho que incrementei errado, pois sempre dá erro...
será que poderiam me ajudar?

Muito obrigado.


Responder

Gostei + 0

15/10/2003

Afarias

select produto, max(atualizacao) from tabela
group by produto


ou, se for para apenas um produto específico::

select max(atualizacao) from tabela
where produto = x


T+


Responder

Gostei + 0

15/10/2003

Anarchybra

Perfeito AFarias,
o que digo é colocar esta instrução naquela primeira que você me passou, isto é que eu não estou conseguindo...


Responder

Gostei + 0

15/10/2003

Afarias

primeiro crie uma VIEW ::

create view ultimas_atualizacoes (produto, atualizacao) as
select produto, max(atualizacao) from tabela
group by produto


depois insira a view no JOIN ::

select a.nome, c.cod_produto, c.descricao, d.rev, d.custo, u.atualizacao
from tabela_a a
inner join tabela_b b on (b.cod_cliente = a.cod_cliente)
inner join tabela_c c on (c.cod_produto = b.cod_produto)
inner join tabela_d d on (d.cod_produto = c.cod_produto)
inner join ultimas_atualizacoes u on (u.produto = b.cod_produto)


T+


Responder

Gostei + 0

15/10/2003

Anarchybra

Afaris, obrigado pela atenção...
mas ele me reotrnou o seguinte erro:

[b:fa3ec80ec9]No argument for format ´¬s´[/b:fa3ec80ec9]

O que estou fazendo de errado?


Responder

Gostei + 0

15/10/2003

Afarias

|mas ele me reotrnou o seguinte erro: No argument for format ´¬s´
|O que estou fazendo de errado?

não sei! só sei q não tem nada com o IB!! ...isso é erro do Delphi (provavelmente do uso da função Format) e sem ver seu código não dá pra dizer.


T+


Responder

Gostei + 0

16/10/2003

Anarchybra

A instrução é a seguinte:

select a.nome, c.descricao, d.custo, ((d.custo / 2.20)*100-100), u.revisao
from cliente a
inner join b b on (b.cod_cliente = a.cod_cliente)
inner join c c on (c.cod_produto = b.cod_formula)
inner join d d on (d.cod_formula = c.cod_produto)
inner join ultima_atualizacao u on (u.cod_produto = c.cod_produto)
where produto.cod_produto like ´¬BR¬´


Responder

Gostei + 0

16/10/2003

Afarias

vc rodou esse código no IBConsole??

acredito q roda normalmente (bom, rodaria se não tivesse erros de sintaxe como o nome das tabelas q não estão ai (está ´b b´, ´c c´, etc...))!!

como disse, o ERRO é no seu código no DELPHI.


T+


Responder

Gostei + 0

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

Aceitar