Fórum Store Procedure meio complicada! #39306
09/10/2003
0
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
Curtir tópico
+ 0Posts
09/10/2003
Afarias
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+
Gostei + 0
10/10/2003
Anarchybra
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.
Gostei + 0
10/10/2003
Afarias
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+
Gostei + 0
10/10/2003
Edison_br
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.
Gostei + 0
13/10/2003
Anarchybra
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.
Gostei + 0
13/10/2003
Anarchybra
eu já consegui... pura besteira minha.... esqueci do DisplayFormat.
Gostei + 0
13/10/2003
Edison_br
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
Gostei + 0
15/10/2003
Anarchybra
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.
Gostei + 0
15/10/2003
Afarias
group by produto
ou, se for para apenas um produto específico::
select max(atualizacao) from tabela
where produto = x
T+
Gostei + 0
15/10/2003
Anarchybra
o que digo é colocar esta instrução naquela primeira que você me passou, isto é que eu não estou conseguindo...
Gostei + 0
15/10/2003
Afarias
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+
Gostei + 0
15/10/2003
Anarchybra
mas ele me reotrnou o seguinte erro:
[b:fa3ec80ec9]No argument for format ´¬s´[/b:fa3ec80ec9]
O que estou fazendo de errado?
Gostei + 0
15/10/2003
Afarias
|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+
Gostei + 0
16/10/2003
Anarchybra
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¬´
Gostei + 0
16/10/2003
Afarias
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+
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)