CID


Você está sempre a procura de expandir seus horizontes e quer aprender uma nova linguagem? Então este post é para você!




O laboratório de computação gráfica da Petrobrás está disponibilizando uma página com materiais de um Curso de Programação em C++ totalmente gratuito!



Não tive tempo de olhar todo o conteúdo do curso, mas para quem está estudando ou pretende estudar essa linguagem de programação, é um prato cheio!



E então, está esperando o que para iniciar seus estudos?

,

No final da postagem todos os Scripts,da criação das tabelas estara em um unico documento

Trigger

A trigger é um comando criado para executar um script toda vez que outro for criado,
Normamalmente é usada para criar relatorios de uso de outras tabelas,
Como no exemplo da tabela aluno:

Como podemos ver a tabela alunoLog está com 3 divisões:

1ª - Destinada ao gravar os detalhes da transação
Qual foi o Usuario(usuario),Quando foi(datalog),E qual foi atualização(tipoAlteracao)

2ª(em azul) - Destinada gravar os dados que pertenciam a tabela aluno antes de alguma atualização/exclusão

3ª(em verde) - Destinada a gravar os novos dados depois de alguma inserção/atualização

Resumindo - Para criar a tabela de trigger basta repicar os dados relevantes da tabela original 2x(Uma para o estado anterior e outra para o atual) e incrementar informações mais relevantes,como:
O usuario,Data,hora de modificação,e o tipo da atualização

A criação da Trigger é se baseia em

CREATE TRIGGER NomeDaTrigger QuandoVaiOcorrer[AFTER/BEFORE] AAçãoQueVaiIniciarOProcesso[INSERT/UPDATE/DELETE] ON NomeDaTabelaASerCopiada
FOR EACH ROW
--Insert simples
INSERT INTO NomeDaTabelaLog
--Lembre se de sempre no insert colocar os dados relevantes
(tipoAlteracao,usuario,datalog,
  campoAtual1,campoAtual2,
  campoAntigo1,campoAntigo1)
  values
  ('AAçãoQueVaiIniciouOProcesso', current_user,current_timestamp,
  new.campoAtual1,new.campoAtual2,
old.campoAntigo1,old.campoAntigo2,);
*tipoAlteracao,usuario,datalog são campos que eu criei para gravar os detalhes, eles podem ser alterados sem nenhum problema
Os comandos current_user e current_timestamp são pre-definidos do SQL sevem para pegar respectivamente o Usuario e o tempo

Baseado nisso já podemos criar nossas Trigger's

Inserção

create trigger tig_ins_aluno before INSERT on aluno
For each row
INSERT INTO alunoLog
(tipoAlteracao,usuario,datalog,
matricula_atu,nome_atu,cpf_atu,endereco_atu,telefone_atu)
values
('Inclusao', current_user,current_timestamp,
new.matricula,new.nome,new.cpf,new.endereco,new.telefone);

Atualização

create trigger tig_alt_aluno before UPDATE on aluno
For each row
INSERT INTO alunoLog
(tipoAlteracao,usuario,datalog,
matricula_atu,nome_atu,cpf_atu,endereco_atu,telefone_atu,
matricula_ant,nome_ant,cpf_ant,endereco_ant,telefone_ant)
values
('Alteracao', current_user,current_timestamp,
new.matricula,new.nome,new.cpf,new.endereco,new.telefone,
old.matricula,old.nome,old.cpf,old.endereco,old.telefone);

Exlusão

create trigger tig_del_aluno before DELETE on aluno
For each row
INSERT INTO alunoLog
(tipoAlteracao,usuario,datalog,
matricula_ant,nome_ant,cpf_ant,endereco_ant,telefone_ant)
values
('Exclusao', current_user,current_timestamp,
old.matricula,old.nome,old.cpf,old.endereco,old.telefone);

Vale lembar que o comando trigger serve para popular uma outra tabela(Log) quando uma estiver sendo populada

Popula 2 tabelas ao mesmo tempo

Para isto a tabelaLog já tem que estar criada no final da postagem você poderá adquiri o script completo des da criação até a população de tabelas

View

A view simplifica a busca de dados, podemos dizer que ela é um atalho de um Select, ao invez de ficarmos toda hora digitando:
Select campo1,campo2,campo3,campo4,campo5,campoN, from NomeDaTabela [Varias Condições]  where campo1='algo' and campo2='algo' or campo1 = 'algo';
Digitamos
SELECT * FROM NomedaView;
Para criar uma View é simples
create view NomeDaView as
--Select simples
Select osCaposASeremSelecionados from NomeDaTabela where Campo1='Condições';
Agora podemos chamar os relatorios de uso da tabela aluno:

Inserção

create view aluno_inclusao as
Select id,tipoAlteracao,usuario,datalog,matricula_atu,nome_atu,cpf_atu,endereco_atu,telefone_atu from alunoLog where tipoAlteracao='Inclusao';

Atualização

create view aluno_alteracao as
Select * from alunoLog where tipoAlteracao='Alteracao';

Exlusão

create view aluno_exclusao as
Select id,tipoAlteracao,usuario,datalog,matricula_ant,nome_ant,cpf_ant,endereco_ant,telefone_ant from alunoLog where tipoAlteracao='Exclusao';
E com isso terminamos nossa aula, e com prometido o codigo completo
CREATE TABLE aluno (
  matricula INTEGER NOT NULL AUTO_INCREMENT,
  nome VARCHAR(45) NOT NULL,
  cpf VARCHAR(11) NOT NULL,
  endereco VARCHAR(50) NOT NULL,
  telefone VARCHAR(10) NOT NULL,
  PRIMARY KEY (matricula)
);
create table alunoLog(
  id INTEGER NOT NULL AUTO_INCREMENT,
  tipoAlteracao varchar(40) not null,
  usuario varchar(40) not null,
  datalog datetime not null,

  matricula_ant INTEGER NULL,
  nome_ant VARCHAR(45) NULL,
  cpf_ant VARCHAR(11) NULL,
  endereco_ant VARCHAR(50) NULL,
  telefone_ant VARCHAR(10) NULL,

  matricula_atu INTEGER  NULL,
  nome_atu VARCHAR(45)  NULL,
  cpf_atu VARCHAR(11)  NULL,
  endereco_atu VARCHAR(50)  NULL,
  telefone_atu VARCHAR(10)  NULL,
  PRIMARY KEY (id)
);
create trigger tig_ins_aluno before INSERT on aluno
For each row
INSERT INTO alunoLog
(tipoAlteracao,usuario,datalog,
matricula_atu,nome_atu,cpf_atu,endereco_atu,telefone_atu)
values
('Inclusao', current_user,current_timestamp,
new.matricula,new.nome,new.cpf,new.endereco,new.telefone);

create trigger tig_alt_aluno before UPDATE on aluno
For each row
INSERT INTO alunoLog
(tipoAlteracao,usuario,datalog,
matricula_atu,nome_atu,cpf_atu,endereco_atu,telefone_atu,
matricula_ant,nome_ant,cpf_ant,endereco_ant,telefone_ant)
values
('Alteracao', current_user,current_timestamp,
new.matricula,new.nome,new.cpf,new.endereco,new.telefone,
old.matricula,old.nome,old.cpf,old.endereco,old.telefone);

create trigger tig_del_aluno before DELETE on aluno
For each row
INSERT INTO alunoLog
(tipoAlteracao,usuario,datalog,
matricula_ant,nome_ant,cpf_ant,endereco_ant,telefone_ant)
values
('Exclusao', current_user,current_timestamp,
old.matricula,old.nome,old.cpf,old.endereco,old.telefone);

create view aluno_exclusao as
Select id,tipoAlteracao,usuario,datalog,matricula_ant,nome_ant,cpf_ant,endereco_ant,telefone_ant from alunoLog where tipoAlteracao='Exclusao';
create view aluno_alteracao as
Select * from alunoLog where tipoAlteracao='Alteracao';
create view aluno_inclusao as
Select id,tipoAlteracao,usuario,datalog,matricula_atu,nome_atu,cpf_atu,endereco_atu,telefone_atu from alunoLog where tipoAlteracao='Inclusao';
Insert into aluno (nome,cpf,endereco,telefone) values
  ('João','12345678901','Taguatinga','33993349'),
  ('Genesia','06649805347','Taguatinga','34790567'),
  ('Joaquim','3698701567','Taguatinga','33993349'),
  ('José','3696901567','Ceilândia','36489057'),
  ('Ana','96348965782','Ceilândia','91325794'),
  ('Facebokson','54395857364','Aguas Lindas','95857364'),
  ('Cleidisun','01938539128','Aguas Lindas','91365794'),
  ('Jenoceria','03648965782','Ceilandia','33679492'),
  ('Genoveva','96348963572','Aguas Lindas','36959354'),
  ('Joana','94750874354','Samambaia','91325754');
Update aluno set nome='Creidisun' where nome='Cleidisun';
delete from aluno where (matricula = 5 or matricula = 2 or matricula = 6 or matricula = 8 or matricula = 9);

SELECT * FROM aluno_alteracao;
SELECT * FROM aluno_exclusao;
SELECT * FROM aluno_inclusao;
Em casao de duvidas e-mail:
CID360@Hotmail.com

, , , , , ,