Jump to content


Vitor Alves

Member Since 14/08/2004
Offline Last Active 03/06/2013, 09:38
***--

Topics I've Started

Triggers

28/05/2013, 10:40

Boa tarde galera, estou com a ideia de montar um sistema para controle de chamados de helpdesk, a lógica seria a seguinte:

O Analista abre um chamado X, este chamado pode ter diversos tramites, ou seja, X.1/X.2/X.3... assim vai. Para montar isso pensei em seguintes tabelas:

create table func (
	cp_codfun int NOT NULL
	constraint pk_func primary key,
	cp_nomfun varchar(50) NOT NULL,
	cp_email varchar(50) NULL
	)

create table cham (
	cp_codcham int not null identity (1,1)
	constraint pk_cham primary key,
	cp_datini date not null,
	cp_codfun int not null
	constraint fk_cham_func foreign key
	references func(cp_codfun),
	cp_nomcli varchar(50) not null,
	cp_nomcont varchar (30) not null,
	cp_desprob text not null,
	cp_status varchar(10) not null
	constraint ck_status check (cp_status in ('aberto','fechado','aguardando'))
	)
	
create table tram (
	cp_codtra int not null
	constraint pk_tram primary key,
	cp_numtra int not null,
	cp_codcall int not null
	constraint fk_tram_cham foreign key
	references cham(cp_codcham),
	cp_dattra date not null
	)

A tabela de tramites, teria ligação com a tabela de chamados. A numeração do tramite tem que ser zerada sempre que mudar a numeração do chamado, perguntando em um lugar e outro me disseram que isso deve ser feito por uma trigger, porém, não sei nada sobre triggers.

Alguém sabe me dizer como criar uma ou me indicar um local onde eu possa ler a respeito de como cria-la?

Desde já agradeço a atenção.

Galera, procurando e xeretando acabei chegando a isso aqui:

DROP TRIGGER IF EXISTS `HISCHM`;

DELIMITER //

CREATE TRIGGER `HISCHM` BEFORE INSERT ON `tram`

 FOR EACH ROW BEGIN

declare numero int default 0;

 Set numero = (select max(cp_numtra) From tram where cp_codcall = new.cp_codcall);


   if ((numero <= 0) or (numero is null))then
      set numero = 1;

   else
      set numero = numero + 1;

   end if;

   set new.cp_numtra = numero;

END
//
DELIMITER ;

Mas não está funfando e não estou conseguindo descobrir o que pode ser?

Alguém tem uma luz divida de sabedoria?

Abraços

IPB Skin By Virteq