DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Luan Stocco
 

País: Brasil
Estado: PR
Cidade: 1
Mensagens: 1
 Postado em: 24/1/2012 11:24:40 AM

Bom dia Pessoal,

Estou com o seguinte problema.

Tenho uma tabela de produtos, nesta tabela esta os produtos finais e tambem as materias primas (que podem ser vendidas avulso).

Por exemplo:

Produto Caminhão dentro deste produto esta vinculado varios outros produtos Peneu, Mangueira, so que dentre estes vinculos podem ocorrer outros vinculos, ex, Mangueira pode ter Terminal, Rosca e assim sucessivamente, ou seja, podem ter sei la 10 20 cadeias de vinculo.

Voltando a base de dados, eu tenho essa tabela de produtos contendo tudo, e tenho outra tabela de vinculo, que faço a relação entre os produtos, e tenho outra tabela de estoque, que é onde eu faço as baixas de estoque.

O que acontece é o seguinte, preciso que no momento que um produto seja debitado do estoque, no caso o Caminhão automaticamente TODOS os vinculos sejam debitados tambem, fiz uma trigger para isso, so que o mysql entende que é um loop infinito.

Segue tabelas e triggers.

TABELA DE PRODUTOS

CREATE TABLE `produtos` (
`id_produto` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`cod_produto` VARCHAR(255) NULL DEFAULT NULL,
`desc_produto` VARCHAR(120) NULL DEFAULT NULL,
`valor_produto` DECIMAL(10,2) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`id_produto`),
UNIQUE INDEX `id_produto` (`id_produto`)
)



TABELA DE VINCULOS

CREATE TABLE `estrutura` (
`id_estrutura` BIGINT(20) NOT NULL AUTO_INCREMENT,
`id_produto` BIGINT(20) NOT NULL DEFAULT 0,
`id_produto_vinculado` BIGINT(20) NOT NULL DEFAULT 0,
`nome_produto` VARCHAR(120) NOT NULL,
`qtde_estrutura` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
PRIMARY KEY (`id_estrutura`)
)



TABELA DE ESTOQUE

CREATE TABLE `estoque` (
`id_estoque` BIGINT(20) NOT NULL AUTO_INCREMENT,
`id_venda` BIGINT(20) NULL DEFAULT 0,
`id_produto` BIGINT(20) NULL DEFAULT 0,
`tipo_estoque` CHAR(7) NULL DEFAULT Entrada,
`qtde_estoque` DECIMAL(10,2) NULL DEFAULT 0.00,
`obs_estoque` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id_estoque`)
)



TRIGGER NA TABELA DE ESTOQUE

DROP TRIGGER IF EXISTS `estoque_trigger`;
SET SESSION SQL_MODE=;
DELIMITER //
CREATE TRIGGER `estoque_trigger` AFTER INSERT ON `estoque` FOR EACH ROW BEGIN
INSERT INTO estoque(id_venda,id_produto,tipo_estoque,qtde_estoque,obs_estoque) SELECT NEW.id_venda,id_produto_vinculado,NEW.tipo_estoque,(NEW.qtde_estoque * qtde_estrutura),NEW.obs_estoque FROM estrutura WHERE id_produto = NEW.id_produto;
END//
DELIMITER ;



me ajudem galera heheheh..

Abraço
Erackson Brito
 
 

País: Brasil
Estado: RN
Cidade: Natal
Mensagens: 35
 Postado em: 22/3/2012 12:07:25 AM
Ao invés de usar recursão de TRIGGERs faça com que o TRIGGER que você criou chame uma PROCEDURE.
Essa PROCEDURE sim fará chamadas recursivas. Dessa forma você terá mais controle sobre a criação de registros na tabela de estoque em cada vínculo e sub-vínculo.

[]´s

 
marcelo Augusto
 

País: Brasil
Estado: MG
Cidade: bh
Mensagens: 51
 Postado em: 25/4/2012 4:58:44 PM
Amigo, desculpe a intromissão mas não seria mais interessante criar tabelas

Grupo de produtos sub_grupo_produtos categoria sub grupos e assim por diante?

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03