 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Qui Fev 03, 2011 7:20 am Assunto: Ajuda para criar trigger |
|
|
Pessoal, to precisando de uma mãozinha pra criar esta trigger:
tenho esta tabela:
| Código: | CREATE TABLE BAIXA_PROD_ESTO_FRACIONADA (
ID INTEGER NOT NULL,
ID_SERVICO INTEGER,
ID_MOVCONTA INTEGER,
ID_PRODUTO INTEGER,
FRACAO_USADA DOUBLE PRECISION
); |
depois a cada inserção nesta tabela preciso executar o seguinte.
primeiro preciso executar este select:
| Código: | select
B.ID_PRODUTO,
P.CUSTO,
SUM(B.FRACAO_USADA) as FRACAO_USADA
from PRODUTO as P INNER JOIN BAIXA_PROD_ESTO_FRACIONADA as B
ON P.ID = B.ID_PRODUTO
group by
1,2 |
bom ai que começa...
apos executar esta consulta... preciso armazenar a soma de cada resultado agrupado em uma variavel pra depois ir comparando P.CUSTO do produto dele mesmo. Esta soma esta agrupando por produto, então a comparação seria com seu produto correspondente, que esta na tabela BAIXA_PROD_ESTO_FRACIONADA.
ao realizar esta verificação o que tenho q fazer é o seguinte:
se a Soma for igual ao valor do P.Custo então realizaria uma inserção em outra tabela e deletaria estes dados da soma deste agrupamento.
se a Soma for maior do que P.Custo então realizaria uma uma outra conta.
o resultado armazenaria em uma variavel, faria uma iserção em outra tabela e realiazaria uma iserção neste mesma tabela com o resultado q foi guardado na variavel e em seguida um delete nos dados da soma agrupada... _________________ Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/ |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 8:57 am Assunto: |
|
|
da uma olhada ai
| Código: |
AS
declare variable vIDPRODUTO integer;
declare variable vCUSTO numeric(14,2);
declare variable vFRACAO_USADA numeric(14,2);
begin
for select
B.ID_PRODUTO,
P.CUSTO,
SUM(B.FRACAO_USADA) as FRACAO_USADA
from PRODUTO as P INNER JOIN BAIXA_PROD_ESTO_FRACIONADA as B
ON P.ID = B.ID_PRODUTO
group by 1,2
into :vIDPRODUTO, :vCUSTO, :vFRACAO_USADA
do begin
if (:vFRACAO >= vCUSTO) then
begin
/* REALIZA A INSERCAO EM OUTRA TABELA */
end
end
end
|
|
|
| Voltar ao Topo |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Qui Fev 03, 2011 12:23 pm Assunto: |
|
|
Rafa... vlw cara...
e la vou eu de novo...rs
fiz o seguinte:
| Código: | AS
declare variable vIDPRODUTO integer;
declare variable vCUSTO numeric(14,2);
declare variable vID numeric(14,2);
declare variable vFRACAO_USADA numeric(14,2);
declare variable vDIFERENCA numeric(14,2);
begin
for select
B.ID_PRODUTO,
P.CUSTO,
P.ID,
SUM(B.FRACAO_USADA) as FRACAO_USADA
from PRODUTO as P INNER JOIN BAIXA_PROD_ESTO_FRACIONADA as B
ON P.ID = B.ID_PRODUTO
group by 1,2,3
into :vIDPRODUTO, :vCUSTO, :vID, :vFRACAO_USADA
do begin
if (:vFRACAO_USADA = vCUSTO) then
begin
/* INSERE NA TABELA MOVPRODUTO*/
insert into movproduto (
ID_PRODUTO, QUANTIDADE, TIPOMOV, DATA)
values (new.id_produto, '1', '1', current_date);
end
if (:vFRACAO_USADA = vCUSTO) then
begin
/* DELETA OS DADOS ATUAIS */
delete from BAIXA_PROD_ESTO_FRACIONADA
where ID_PRODUTO = new.id_produto;
end
if (:vFRACAO_USADA > vCUSTO) then
begin
vdiferenca = vfracao_usada - vcusto;
/* INSERE NA TABELA MOVPRODUTO*/
insert into movproduto (
ID_PRODUTO, QUANTIDADE, TIPOMOV, DATA)
values (new.id_produto, '1', '1', current_date);
/* INSERE NA TABELA BAIXA FRACIONADA A DIFERENÇA ENCONTRADA*/
insert into baixa_prod_esto_fracionada (
ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
values (new.id_servico, new.id_produto, :vdiferenca);
end
if (:vFRACAO_USADA > vCUSTO) then
begin
/* DELETA OS DADOS ATUAIS */
delete from BAIXA_PROD_ESTO_FRACIONADA
where ID_PRODUTO = new.id_produto;
end
end
end |
Só que agora esta dando um erro quando esta consulta é verdadeira
| Código: | | if (:vFRACAO_USADA > vCUSTO) then |
creio q o erro esteja em inserir na tabela baixa_prod_esto_fracionada o valor da diferença q esta na variavel vDIFERENCA mas não consegui encontrar o pq _________________ Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/ |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 1:05 pm Assunto: |
|
|
não entendi?
qual é o erro? |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 1:08 pm Assunto: |
|
|
uma das coisa q eu vi é q ta faltando o ID_MOVCONTA
| Código: |
insert into baixa_prod_esto_fracionada (
ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
values (new.id_servico, new.id_produto, :vdiferenca);
|
|
|
| Voltar ao Topo |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Qui Fev 03, 2011 2:03 pm Assunto: |
|
|
| rafmattos escreveu: | uma das coisa q eu vi é q ta faltando o ID_MOVCONTA
| Código: |
insert into baixa_prod_esto_fracionada (
ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
values (new.id_servico, new.id_produto, :vdiferenca);
|
|
Então este ID_MOVCONTA não interfere em nada... pois não é obrigatorio.... mas o erro é este.
 _________________ Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/ |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 2:07 pm Assunto: |
|
|
| vixi esse erro é de estouro de campo |
|
| Voltar ao Topo |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 2:09 pm Assunto: |
|
|
| Código: |
insert into baixa_prod_esto_fracionada (
ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
values (new.id_servico, new.id_produto, cast(:vdiferenca as numeric(15,2)));
|
tenta assim pra gente ve |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 2:12 pm Assunto: |
|
|
| edsonalves escreveu: | | rafmattos escreveu: | | vixi esse erro é de estouro de campo |
vixi mano q isso?  |
o campo não suportou a qtde de numeros ou carcteres q foi passado para ele. pq ele é menor |
|
| Voltar ao Topo |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Qui Fev 03, 2011 2:20 pm Assunto: |
|
|
| rafmattos escreveu: | | Código: |
insert into baixa_prod_esto_fracionada (
ID_SERVICO, ID_PRODUTO, FRACAO_USADA)
values (new.id_servico, new.id_produto, cast(:vdiferenca as numeric(15,2)));
|
tenta assim pra gente ve |
deu mesmo erro. _________________ Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/ |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 2:29 pm Assunto: |
|
|
muda os tipos das suas variavel igual ta no banco
| Código: |
declare variable vIDPRODUTO integer;
declare variable vCUSTO numeric(14,2);
declare variable vID numeric(14,2);
declare variable vFRACAO_USADA numeric(14,2);
declare variable vDIFERENCA numeric(14,2);
|
|
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 2:31 pm Assunto: |
|
|
| essa tabela baixa_prod_esto_fracionada possui alguma trigger ? |
|
| Voltar ao Topo |
|
 |
edsonalves Colaborador


Registrado: Terça-Feira, 27 de Janeiro de 2009 Mensagens: 1938 Localização: Bauru - SP
|
Enviada: Qui Fev 03, 2011 2:33 pm Assunto: |
|
|
| rafmattos escreveu: | muda os tipos das suas variavel igual ta no banco
| Código: |
declare variable vIDPRODUTO integer;
declare variable vCUSTO numeric(14,2);
declare variable vID numeric(14,2);
declare variable vFRACAO_USADA numeric(14,2);
declare variable vDIFERENCA numeric(14,2);
|
|
Como assim? as variaveis já estão desse jeito ai...
o campo onde passo o valor q esta em vDIFERENCA no banco é
DOUBLE PRECISION _________________ Cria em mim, ó Deus, um coração puro, e renova em mim um espírito reto.
http://twitter.com/edson_alves_
Skype: edson.alvesan
http://www.vacabikers.wordpress.com/ |
|
| Voltar ao Topo |
|
 |
rafmattos Colaborador

Registrado: Quinta-Feira, 11 de Fevereiro de 2010 Mensagens: 3416 Localização: Campo Grande/MS
|
Enviada: Qui Fev 03, 2011 2:40 pm Assunto: |
|
|
| então ao inves de numeric muda para DOUBLE PRECISION |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|