
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
