quarta-feira, 2 de julho de 2014
http://www.otimatecnologia.com.br
domingo, 23 de março de 2014
Banco de dados CEP
domingo, 1 de março de 2009
Engenharia de Software - Doomsday ep01
James Bond desenvolveu um sistema bastante complexo, não adotou nenhuma metodologia de desenvolvimento, código complexo,funções paranormais (só baixando um santo pra saber) e inúmeras Stored Procedures ao invés de utilizar da boa prática de uma camada de Acesso aos Dados (DAL) no software e ainda por cima não documentou nada, nem sequer comentou as Stored Procedures. Depois de quase concluído o sistema, James saiu da empresa e deixou a liga da justiça na mão, pois nada foi documentado, nem sequer para que serve o sistema. Posteriormente com sistema ainda inacabado, o cliente Lex Luthor solicitou N modificações no sistema.
A liga da justiça foi acionada, com 0% de conhecimento do sistema Martian Manhunter verificou as alterações a serem feitas passou para o Mestre Yoda o que deveria ser feito. Logo Mestre Yoda passou o prazo de entrega para as alterações e Lex Luthor ficou satisfeito por enquanto...só por enquanto.
Martian Manhunter com seu amigo Arqueiro Verde começaram a documentar o sistema e enteder o funcionamento do sistema e nessa documentação percebem que o perigo eminente é muito maior do que esperavam. As modificações são imensas e irão afetar o sistema inteiro. Martian Manhunter percebeu então que o prazo para a entrega da solicitação feita por Lex Luthor não seria mais possível, nem mesmo com a ajuda do The Flash...
A história acima pode ser um exemplo de como não proceder ao desenvolver um software, a falta de documentação e entendimento do sistema prejudicou toda a Liga da Justiça. Podemos citar isso como falta de maturidade em uma equipe de desenvolvimento de softwares. São boas práticas que essencialmente ajudam na futura manutenibilidade do código.
Estimativas de software são geralmente feitas na hora errada e pelas pessoas erradas!
Tabelas desnormalizadas, atributos no banco com underscore, SQL junto com regras de negócios, Stored Procedure com regras de negócio, interface carregada, várias opções de cadastro em uma mesma tela, falta de comentário em linha de código e todo tipo possível de má prática em um desenvolvimento de software...
Um dos fatores mais importante na qualidade do trabalho de desenvolvimento de software é a qualidade dos programadores.
sábado, 31 de janeiro de 2009
Stored Procedure
Muito se discute na sua utilização, de certa forma há uma briga entre desenvolvedores na qual uns são extremamente contra e outros a favor do uso das Stored Procedures.
Eu sou do time que joga contra as Stored Procedures.
Acredito que Stored Procedures foram feitas para o DBA e não para o programador, acredito também que seu uso junto aos softwares é nada mais do que POG.
Uma boa dica é: Se for usar Stored Procedure: Nunca coloque /else/case/
nada de condições nas mesmas, somente um insert/delete/update simples.
Caso use os if/elses ou cases da vida, toda teória de que SPs são mais
rápidas/otimizadas serão anuladas.
domingo, 17 de agosto de 2008
Amigo da Onça
Estavam dois amigos em uma selva, um deles disse:
-Ei, João, se você visse uma onça, o que você faria?
-Eu daria um tiro nela.
-E se você não tivesse uma arma?
-Eu a mataria na faca.
-E se você não tivesse nenhuma faca?
-Eu subiria numa árvore.
-E se não tivesse nennhuma árvore?
-Eu fugiria correndo.
-E se você estivesse com cãibra no pé?
-Ora você é meu amigo ou amigo da onça?
terça-feira, 15 de julho de 2008
terça-feira, 8 de julho de 2008
Microsoft SkyDrive
Melhor que o serviço GDrive do google, pois este da microsof não é necessário programa para logar no drive virutal e ainda é possível compartilhar com os amigos os seus arquivos.Há muito tempo estava procurando um serviço assim e agora disponível para todos, até que enfim a Microsoft fez algo que presta e ainda com 5GB, obaaaaaaaaaaaaaa.
Meu Drive virtual - http://cid-e67429c4ffea5feb.skydrive.live.com/browse.aspx/Compartilhado
sábado, 28 de junho de 2008
Monte Carlo PI - Distribuído parte 2

Outro método interessante para o cálculo de π pode ser realizado através de Monte Carlo utilizando-se a estatística. Nesse método são sorteados aleatoriamente pontos num quadrado compreendido entre as coordenadas O = (0,0) e B = (1,1). Em seguida calcula-se a distância dos pontos sorteados cn = (xn,yn) até a origem O = (0, 0). π pode ser aproximado através do número de pontos inscritos na circunferência de raio 1 em relação ao total de pontos sorteados no quadrado de lado 1.
Código:
Versão 1 - Servidor se conecta ao cliente.
Versão 2 - Cliente se conecta ao Servidor.
Cliente e Servidor - Compactados, cliente e servidor.
quinta-feira, 17 de abril de 2008
Monte Carlo PI - Paralelismo parte 1

para calcular o valor de PI:
1. Inscreva um circulo em um quadrado de lado = 1
2. Gere pontos aleatórios dentro do quadrado
3. Determine o numero de pontos que cair˜ao dentro do círculo
4. Faça ser o numero de pontos dentro do círculo dividido pelo número de pontos gerados
5. PI = 4r
6. Quanto mais pontos s˜ao gerados, mais preciso é o número PI
O programa deve ser feito utilizando a biblioteca pthreads em C.
Deverá existir uma thread "mestre". Essa thread ir´a instanciar o número necessário de threads
"escravo" para executar o cálculo do PI. A thread "mestre" pode ser a execução do programa principal. O usuario deve entrar com a quantidade de threads "escravos" que seu programa ira criar. Alem disso, o usuario vai entrar com a quantidade de pontos a serem gerados. A thread "mestre" ir´a criar a quantidade de threads "escravos" e dividir a quantidade de pontos que cada thread "escravo" ira gerar. Ao final da execu¸c˜ao, a thread "escravo" ir´a atualizar uma variável compartilhada (utilizando seção crítica) para informar a quantidade de pontos gerado dentro do círculo.
Após o término de todas threads "escravo", a thread "mestre" ir´a encontrar o valor de PI fazendo: PI = 4r.
Código aqui
segunda-feira, 18 de junho de 2007
Projetos de Sistemas de Informação - Trabalho Final

Veja seqüência de figuras para descrever como foi feito a execução do projeto:
Figura 1 = Como o professor explicou...
Figura 2 = Como o líder do projeto entendeu...
Figura 3 = Como o analista projetou...
Figura 4 = Como o programador construiu...
Figura 5 = Como o Consultor de Negócios descreveu...
Figura 6 = Como o projeto foi documentado...
Figura 7 = Que funcionalidades foram instaladas...
Figura 8 = Como o professor foi cobrado...
Figura 9 = Como foi mantido...
Figura 10 = O que o professor realmente queria...
PROJETO DE DESENVOLVIMENTO DE UM SISTEMA PARA CONTROLE DE SERVIÇOS DE UMA OFICINA
Objetivo
O objetivo do Sistema de Gestão de serviços consiste em controlar todas as informações necessárias para a equipe da oficina e os gestores da empresa possam realizar seu trabalho.
Forma de Contratação e de Desenvolvimento
O sistema deve ser desenvolvido segundo critérios próprios de contratação da instituição, que envolve os seguintes passos, que são baseado na estrutura do RUP:
Concepção do SGATE
• Desenvolvimento de uma Visão inicial do sistema (proposta técnica).
Elaboração do SGATE• Desenvolvimento de protótipo de interface do usuário.
• Desenvolvimento de diagrama de casos de uso.
• Desenvolvimento de diagrama de classes do sistema.
Construção do SGATE
• Implementação do sistema
Transição do SGATE
• Apresentação ao contratante
Marco 3 : entrega do sistema definitivo
Neste marco, o sistema será apresentado ao cliente (no caso, o professor).
Trabalho da Disciplina
O trabalho da disciplina consiste de implementar o sistema conforme o critério de contratação acima, assim como os artefatos de cada fase.
Download Projeto - Clique aqui
domingo, 17 de junho de 2007
Banco de Dados - Trabalho Final
Projetar e implementar um sistema de banco de dados para manter as informações relativasa uma aplicação definida pelo grupo e aprovada pelo professor. Os temas para desenvolvimento poderão ser os mesmos utilizados nas disciplinas Gerência de Projetos
e/ou Projeto de Sistemas.
esquema relacional resultante do projeto deverá gerar, no mínimo, 10 tabelas.
Tarefas a serem cumpridas:
1) Representar o esquema conceitual do banco de dados através do diagrama entidaderelacionamento e do diagrama de classes.
2) Fazer o mapeamento do diagrama entidade-relacionamento ou do diagrama de classes para um esquema relacional, respeitando as regras de normalização.
3) Escrever comandos CREATE TABLE para as tabelas do esquema relacional gerado, considerando a existência de chaves primárias e estrangeiras.
4) Elaborar consultas SQL com as seguintes características (cada consulta deverá incluir, no mínimo, 3 tabelas):
· Duas consultas envolvendo junção.
· Três consultas envolvendo operações de conjuntos (união, interseção e diferença).
· Quatro consultas envolvendo operações agregadas (SUM, COUNT, MAX, MIN,
AVG), pelo menos uma das consultas deve envolver as cláusulas GROUP BY e
HAVING.
· Três consultas envolvendo os operadores LIKE, BETWEEN e IN.
· Criar duas visões, cada uma envolvendo pelo menos três tabelas.
5) Fazer uma interface para entrada de dados utilizando um ambiente de desenvolvimento integrado (Delphi, C++ Builder), java ou alguma ferramenta para desenvolvimento Web. Essa interface deverá contemplar a implementação de pelo menos cinco regras de negócio definidas para a aplicação.
segunda-feira, 11 de junho de 2007
Gerente..

Uma empresa, achando que era hora de mudar o estilo de administração, contratou um novo gerente. O novo Chefão veio determinado a balançar as bases, romper paradigmas e tornar a empresa mais produtiva. No primeiro dia, acompanhado dos principais assessores, fez uma inspeção por toda a empresa.
No setor de empacotamento, todos estavam trabalhando duro, mas um rapaz novo, estava encostado na parede, com as mãos nos bolsos. Vendo aí uma boa oportunidade de demonstrar sua nova filosofia de trabalho e, logicamente, a possibilidade de brilhar profusamente diante de seus novos companheiros de trabalho, o gerente perguntou ao rapaz:
- Quanto você ganha por mês, meu rapaz ?
- Duzentos reais, - respondeu o rapaz sem saber do que se tratava - porquê ?
O Gerente tirou 200 reais do bolso e deu para o fulano dizendo:
- Aqui estão seus 200 reais deste mês. Agora suma daqui e não volte mais.
O rapaz embolsou o dinheiro e saiu o mais depressa que pôde.
O gerente, enchendo o peito, pergunta ao grupo de operários:
- Algum de vocês sabe o que esse sujeito fazia aqui ?
- Ele era o entregador de pizza - respondeu um dos operários
domingo, 10 de junho de 2007
Gerência de Projetos - Trabalho Final

I.Meta: Elaborar, até a data de entrega estabelecida pelo professor, os documentos pedidos em uma das fases:
-Fase I: Proposta técnica-comercial;
-Fase II: Plano de projeto;
Em anexo, segue todo o trabalho e enunciado para o mesmo.
Clique aqui para fazer o DOWNLOAD
Defeitos em monitor Samsung

O documento contém imagens de como consertar solda fria em monitores samsung, foi um colega meu que me mandou e estou disponibilizando para vocês.
Conserto de : 1 Imagem sem cor, cor oscilando, imagem descentralizada, imagem não fecha por completo na tela.
Download documento com imagens
PROGRAMA P2P - Uma variável do EA-Share
PROGRAMA P2P é um programa de comunicação peer-to-peer como o Napster. A idéia é disponibilizar a lista de arquivos locais em um servidor para que todos os clientes possam pesquisá-los. Porém a transferência de arquivos é feita entre cada usuário diretamente sem a passagem dos dados pelo servidor.
O servidor é implementado em Unix e os clientes em Windows . Para isso ele deve fazer o controle das conexões TCP/IP ativas e tratar eventuais desconexões. Deve ser implementado um protocolo simples de mensagens, entrada e saída de usuários. Toda busca de arquivos efetuada por um cliente, é pesquisada nos arquivos do servidor e o cliente deve receber o resultado da busca contendo o número IP dos demais clientes que possuem o arquivo requisitado. A transferência é feita diretamente entre os clientes.
O trabalho acima é uma variação do EA-SHARE, um amigo meu o (Eder - Link pro blog dele) fez uma nova versão daquele antigo, pra apresentar na matéria de Redes de Computadores neste primeiro semestre de 2007.
Este software não tem qualquer tipo de garantia, e o autor não poderá ser responsabilizado por qualquer tipo de prejuízo causado pela sua execução ou distribuição do mesmo. A execução deste programa correrá por sua conta e risco. Este programa tem licença gratuita e pode ser distribuído livremente...
quarta-feira, 6 de junho de 2007
Banco de Dados Exercício 7
1. Selecione os nomes de todos os empregados do departamento 'Research' que trabalham mais de 10 horas por semana no projeto 'ProdutoX'.
SELECT E.FNAME
FROM R11_EMPLOYEE E, R11_WORKS_ON W, R11_PROJECT P, R11_DEPARTMENT D
WHERE P.PNUMBER = W.PNO AND W.ESSN = E.SSN AND W.HOURS > 10
AND P.DNUM = D.DNUMBER AND P.PNAME = 'ProdutoX' AND D.DNAME = 'Research';
2. Selecionar o nome dos empregados que tenham um dependente com o mesmo primeiro nome que o deles.
SELECT E.FNAME' 'E.LNAME
FROM R11_EMPLOYEE E
WHERE E.FNAME = ANY
(SELECT D.DEPENDENT_NAME
FROM R11_DEPENDENT D
WHERE D.ESSN = E.SSN)
3. Selecionar o nome dos empregados que são diretamente supervisionados por 'Franklin Wong'.
SELECT E.FNAME' 'E.LNAME
FROM R11_EMPLOYEE E
WHERE E.SUPERSSN =
(SELECT E1.SSN
FROM R11_EMPLOYEE E1
WHERE E1.FNAME = 'Franklin' AND E1.LNAME = 'Wong');
4. Selecionar o nome do projeto e o número total de horas por semana (de todos os empregados) gastas no projeto.
SELECT P.PNAME, SUM(W.HOURS)
FROM R11_PROJECT P, R11_WORKS_ON W
WHERE P.PNUMBER = W.PNO GROUP BY P.PNAME;
5. Selecionar o nome dos empregados que trabalham em todos os projetos.
SELECT E.FNAME
FROM R11_EMPLOYEE E, R11_WORKS_ON WO, R11_PROJECT P
WHERE WO.PNO = P.PNUMBER AND WO.ESSN = E.SSN
GROUP BY E.FNAME;
6. Selecionar o nome dos empregados que não trabalham em nenhum projeto.
SELECT E.FNAME
FROM R11_EMPLOYEE E, R11_WORKS_ON WO, R11_PROJECT P
WHERE WO.PNO = P.PNUMBER AND WO.ESSN NOT IN E.SSN
GROUP BY E.FNAME;
7. Selecionar o nome do departamento e a média salarial de seus empregados.
SELECT DPTO.DNAME, AVG(E.SALARY) AS MEDIA_SALARIO
FROM R11_DEPARTMENT DPTO, R11_EMPLOYEE E
WHERE E.SSN = DPTO.MGRSSN
GROUP BY DPTO.DNAME;
8. Selecione a média salarial dos empregados do sexo feminino.
SELECT AVG(E.SALARY)
FROM R11_EMPLOYEE E
WHERE E.SEX = 'F';
9. Selecione o nome e o endereço dos empregados que trabalhem em pelo menos um projeto localizado em 'Houston', mas cujo departamento não se localiza em 'Houston'.
SELECT E.FNAME, E.ADDRESS
FROM R11_EMPLOYEE E, R11_PROJECT P, R11_DEPARTMENT DPT, R11_DEPT_LOCATIONS DL, R11_WORKS_ON W
WHERE E.DNO = DPT.DNUMBER AND DPT.DNUMBER = DL.DNUMBER
AND DL.DLOCATION <> 'Houston' AND E.SSN = W.ESSN
AND W.PNO = P.PNUMBER AND P.PLOCATION = 'Houston'
GROUP BY E.FNAME, E.ADDRESS;
10. Selecione o nome de todos os gerentes de departamento que não tenham dependentes.
SELECT E.FNAME
FROM R11_EMPLOYEE E, R11_DEPARTMENT DPT
WHERE E.SSN = DPT.MGRSSN AND E.SSN NOT IN
(SELECT D.ESSN
FROM R11_DEPENDENT D);
Banco de Dados Exercício 6
SELECT A.NOME
b) Selecionar os nomes das disciplinas que o professor “KING” lecionou entre 1998 e1999.
c) Selecionar o nome da disciplina, o código da turma, o semestre, o ano e o número dealunos matriculados para as disciplinas que do professor “KING”.
SELECT D.NOMEDISC , T.CODTURMA, T.SEMESTRE, T.ANO, COUNT(A.MATRICULA) AS NUM_ALUNOS
d) Selecionar o código da disciplina, o nome da disciplina, o número de créditos, osemestre, o ano e o conceito obtido pelo aluno em seu histórico escolar.
SELECT D.CODDISC, D.NOMEDISC, D.CREDITOS, T.SEMESTRE, T.ANO, H.CONCEITO
e) Selecione o nome do aluno e o nome do departamento para os alunos que possuemapenas conceito “A”.
SELECT DISCTINCT A.NOME,D.NOMEDEPTO
f) Selecionar o nome do aluno e o nome do departamento para os alunos que nãoobtiveram nenhum conceito “A”.
SELECT DISTINCT A.NOME,D.NOMEDEPTO
g) Inserir na tabela alunos os seguintes valores <25,’johnson’,02).>
h) Inserir na tabela disciplina os seguintes valores <’CC4390’,’Engenharia doConhecimento’,3,01>.
INSERT INTO R10_Disciplina VALUES ('CC4390','Engenharia doConhecimento',3,01);
Banco de Dados Exercício 5
DROP TABLE R11_EMPLOYEE CASCADE CONSTRAINTS;
DROP TABLE R11_DEPT_LOCATIONS CASCADE CONSTRAINTS;
DROP TABLE R11_PROJECT CASCADE CONSTRAINTS;
DROP TABLE R11_WORKS_ON CASCADE CONSTRAINTS;
DROP TABLE R11_DEPENDENT CASCADE CONSTRAINTS;
CREATE TABLE R11_DEPARTMENT (
DNAME VARCHAR(15) NOT NULL,
DNUMBER INT NOT NULL,
MGRSSN CHAR(9) NOT NULL,
MGRSTARTDATE DATE,
PRIMARY KEY (DNUMBER),
UNIQUE(DNAME)
);
CREATE TABLE R11_EMPLOYEE (
FNAME VARCHAR(15) NOT NULL,
MINIT CHAR,
LNAME VARCHAR(15) NOT NULL,
SSN CHAR(9) NOT NULL,
BDATE DATE,
ADDRESS VARCHAR(30),
SEX CHAR,
SALARY DECIMAL(10,2),
SUPERSSN CHAR(9),
DNO INT NOT NULL,
PRIMARY KEY (SSN),
FOREIGN KEY (SUPERSSN) REFERENCES R11_EMPLOYEE(SSN),
FOREIGN KEY (DNO) REFERENCES R11_DEPARTMENT(DNUMBER)
);
ALTER TABLE R11_DEPARTMENT ADD CONSTRAINT FK_R11_EMPLOYEEDEPT FOREIGN KEY (MGRSSN) REFERENCES R11_EMPLOYEE(SSN) DEFERABLE;
CREATE TABLE R11_DEPT_LOCATIONS (
DNUMBER INT NOT NULL,
DLOCATION VARCHAR(15) NOT NULL,
PRIMARY KEY (DNUMBER, DLOCATION),
FOREIGN KEY (DNUMBER) REFERENCES R11_DEPARTMENT(DNUMBER)
);
CREATE TABLE R11_PROJECT (
PNAME VARCHAR(15) NOT NULL,
PNUMBER INT NOT NULL,
PLOCATION VARCHAR(15),
DNUM INT NOT NULL,
PRIMARY KEY (PNUMBER),
UNIQUE(PNAME),
FOREIGN KEY (DNUM) REFERENCES R11_DEPARTMENT(DNUMBER)
);
CREATE TABLE R11_WORKS_ON (
ESSN CHAR(9) NOT NULL,
PNO INT NOT NULL,
HOURS DECIMAL(3,1) NOT NULL,
PRIMARY KEY(ESSN, PNO),
FOREIGN KEY(ESSN) REFERENCES R11_EMPLOYEE(SSN),
FOREIGN KEY(PNO) REFERENCES R11_PROJECT(PNUMBER)
);
CREATE TABLE R11_DEPENDENT (
ESSN CHAR(9) NOT NULL,
DEPENDENT_NAME VARCHAR(15) NOT NULL,
SEX CHAR,
BDATE DATE,
RELATIONSHIP VARCHAR(8),
PRIMARY KEY (ESSN, DEPENDENT_NAME),
FOREIGN KEY(ESSN) REFERENCES R11_EMPLOYEE(SSN)
);
INSERT INTO R11_DEPARTMENT VALUES ('Research', 5, '333445555', '22/05/1988');
INSERT INTO R11_DEPARTMENT VALUES ('Administration', 4, '987654321', '01/01/1995');
INSERT INTO R11_DEPARTMENT VALUES ('Headquarters', 1, '888665555', '19/06/1981');
INSERT INTO R11_DEPT_LOCATIONS VALUES (1, 'Houston');
INSERT INTO R11_DEPT_LOCATIONS VALUES (4, 'Stafford');
INSERT INTO R11_DEPT_LOCATIONS VALUES (5, 'Bellaire');
INSERT INTO R11_DEPT_LOCATIONS VALUES (5, 'Sugarland');
--#INSERT INTO R11_DEPT_LOCATIONS VALUES (null, 'Houston');
INSERT INTO R11_PROJECT VALUES ('ProdutoX', 1, 'Bellaire', 5);
INSERT INTO R11_PROJECT VALUES ('ProdutoY', 2, 'Sugarland', 5);
INSERT INTO R11_PROJECT VALUES ('ProdutoZ', 3, 'Houston', 4);
INSERT INTO R11_PROJECT VALUES ('Computerization', 10, 'Stafford', 4);
INSERT INTO R11_PROJECT VALUES ('Reorganization', 20, 'Houston', 1);
INSERT INTO R11_PROJECT VALUES ('Newbenefits', 30, 'Stafford', 4);
INSERT INTO R11_EMPLOYEE VALUES ('James', 'E', 'Borg', '888665555', '10/11/1937', '450 Stone, Houston, TX', 'M', 55000, null, 1);
INSERT INTO R11_EMPLOYEE VALUES ('Franklin', 'T', 'Wong', '333445555', '08/12/1955', '638 Voss, Houston, TX', 'M', 40000, '888665555', 5);
INSERT INTO R11_EMPLOYEE VALUES ('John', 'B', 'Smith', '123456789', '01/09/1965', '731 fondren, Houston, TX', 'M', 30000, '333445555', 5);
INSERT INTO R11_EMPLOYEE VALUES ('Jennifer', 'S', 'Wallace', '987654321', '20/06/1941', '291 Berry, Bellaire, TX', 'F', 43000, '888665555', 4);
INSERT INTO R11_EMPLOYEE VALUES ('Alicia', 'J', 'Zelaya', '999887777', '19/01/1968', '3321 Castle, Spring, TX', 'F', 25000, '987654321', 4);
INSERT INTO R11_EMPLOYEE VALUES ('Ramesh', 'K', 'Narayan', '666884444', '15/09/1962', '975, Fire Oak, Humble, TX', 'M', 38000, '333445555', 5);
INSERT INTO R11_EMPLOYEE VALUES ('Joyce', 'A', 'English', '453453453', '31/07/1972', '6531 Rice, Houston, TX', 'F', 25000, '333445555', 5);
INSERT INTO R11_EMPLOYEE VALUES ('Ahmad', 'V', 'Jabbar', '987987987', '29/03/1969', '980 Dallas, Houston, TX', 'M', 25000, '987654321', 4);
INSERT INTO R11_WORKS_ON VALUES ('123456789', 1, 32.5);
INSERT INTO R11_WORKS_ON VALUES ('123456789', 2, 7.5);
INSERT INTO R11_WORKS_ON VALUES ('666884444', 3, 40.0);
INSERT INTO R11_WORKS_ON VALUES ('453453453', 1, 20.0);
INSERT INTO R11_WORKS_ON VALUES ('453453453', 2, 20.0);
INSERT INTO R11_WORKS_ON VALUES ('333445555', 2, 10.0);
INSERT INTO R11_WORKS_ON VALUES ('333445555', 3, 10.0);
INSERT INTO R11_WORKS_ON VALUES ('333445555', 10, 10.0);
INSERT INTO R11_WORKS_ON VALUES ('333445555', 20, 10.0);
INSERT INTO R11_WORKS_ON VALUES ('999887777', 30, 30.0);
INSERT INTO R11_WORKS_ON VALUES ('999887777', 10, 10.0);
INSERT INTO R11_WORKS_ON VALUES ('987987987', 10, 35.0);
INSERT INTO R11_WORKS_ON VALUES ('987987987', 30, 5.0);
INSERT INTO R11_WORKS_ON VALUES ('987654321', 30, 20.0);
INSERT INTO R11_WORKS_ON VALUES ('987654321', 20, 15.0);
INSERT INTO R11_WORKS_ON VALUES ('888665555', 20, null);
INSERT INTO R11_DEPENDENT VALUES ('333445555', 'Alice', 'F', '05/04/1986', 'FILHA');
INSERT INTO R11_DEPENDENT VALUES ('333445555', 'Theodore', 'M', '25/10/1983', 'FILHO');
INSERT INTO R11_DEPENDENT VALUES ('333445555', 'Joy', 'F', '03/05/1958', 'CONJUGE');
INSERT INTO R11_DEPENDENT VALUES ('987654321', 'Abner', 'M', '28/02/1942', 'CONJUGE');
INSERT INTO R11_DEPENDENT VALUES ('123456789', 'Michael', 'M', '04/01/1988', 'FILHO');
INSERT INTO R11_DEPENDENT VALUES ('123456789', 'Alice', 'F', '30/12/1988', 'FILHA');
INSERT INTO R11_DEPENDENT VALUES ('123456789', 'Elizabeth', 'F', '05/05/1967', 'CONJUGE');
Com base no esquema acima responda as seguintes perguntas :
1. Selecionar, para os empregados que possuem menos de 200 meses de tempo de serviço, o nome do empregado, a data de admissão, a data em que ele completou 6 meses de tempo de serviço, a data da primeira sexta-feira (FRIDAY) após sua admissão, e o último dia do mês em que ele foi admitido.
SELECT ENAME,HIREDATE,ADD_MONTHS(HIREDATE,6),
NEXT_DAY(HIREDATE,'SEXTA'),LAST_DAY(HIREDATE)
FROM EMP
WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE) > 200;
2. Selecionar o nome do empregado, o mês e o ano em que ele foi admitido.
SELECT ENAME,TO_CHAR(HIREDATE,'MM') AS MES_ADMISSAO,TO_CHAR(HIREDATE,'YYYY')AS ANO_ADMISSAO FROM EMP;
3. Selecionar o nome do empregado e o seu salário no formato ‘R$ 99,999’.
SELECT ENAME,TO_CHAR(SAL,'L9999,99')
FROM EMP;
4. Selecionar o nome do empregado, o salário, o valor da comissão e o salário anual.
SELECT ENAME,SAL,12*(SAL) AS SALARIO_ANUAL , COMM
FROM EMP;
5. Selecionar o nome do empregado, o salário, e o salário revisado.
OBS: O salário revisado é calculado de acordo com a seguinte regra:
SE job = ‘ANALYST’ ENTAO sal = sal * 1.1
SE job = ‘CLERK’ ENTAO sal = sal * 1.15
SE job = ‘MANAGER’ ENTAO sal = sal * 1.20
SENAO sal = sal
SELECT ENAME,SAL,DECODE(JOB, 'ANALYST' , (sal * 1.1) , 'CLERK' , (sal * 1.15) , 'MANAGER', (sal * 1.20), sal ) AS SALARIO_REVISADO
FROM EMP;
6. Computar o produto cartesiano das tabelas EMPR e DEPT.
SELECT * FROM EMP, DEPT;
7. Selecionar o nome do empregado, o nome e a localização do departamento onde ele
trabalha.
SELECT ENAME, DNAME , LOC
FROM EMP, DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO;
8. Selecionar o nome do empregado, o salário e o grau (faixa de salário).
SELECT ENAME, SAL , GRADE
FROM EMP , SALGRADE
WHERE SAL BETWEEN LOSAL AND HISAL;
9. Selecionar o nome do empregado e o nome do subordinado, para os subordinados ate o
ultimo nível na hierarquia (operação de fechamento recursivo).
Select ...
10. Selecionar o nome do departamento e o numero de empregados, para os departamentos que possuem pelo menos 10 empregados.
SELECT DNAME , COUNT(EMPNO)
FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO
GROUP BY DNAME
HAVING COUNT(EMPNO)>10;
11. Selecionar o nome do departamento e o salario total dos seus empregados, para os
departamentos cuja soma de salarios seja superior a 5000.
SELECT DNAME , SUM(SAL) AS TOTALSAL
FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO
GROUP BY DNAME
HAVING SUM(SAL)>5000;
Banco de Dados Exercício 4
drop table r1_produto cascade constraints;
drop table r1_item_nf cascade constraints;
drop table r1_cliente cascade constraints;
create table r1_cliente(
cgc varchar2(14) not null,
razao varchar2(20) not null,
endereco varchar2(50),
cidade varchar2(20),
uf varchar2(2),
constraint pkcliente primary key (cgc));
create table r1_produto(
codigo varchar2(6) not null,
descricao varchar2(50) not null,
estoque integer,
preco number(8,2),
desconto number(8,2),
constraint pkproduto primary key (codigo));
create table r1_nota_fiscal(
serie varchar2(1) not null,
numero varchar2(10) not null,
cgc varchar2(14),
data date,
condicao varchar2(10),
constraint pknf primary key (serie,numero),
constraint fkcliente_nf foreign key (cgc) references r1_cliente(cgc));
create table r1_item_nf(
serie varchar2(1) not null,
numero varchar2(10) not null,
produto varchar2(6) not null,
preco number(8,2) not null,
quantidade integer,
constraint pkitem_nf primary key (serie,numero,produto),
constraint fknf_item foreign key (serie,numero) references r1_nota_fiscal(serie,numero),
constraint fkproduto_item foreign key (produto) references r1_produto(codigo));
insert into r1_cliente values ('11111111111111','BH Hardsoft','rua das Flores, 50','Belo Horizonte','MG');
insert into r1_cliente values ('22222222222222','Popular PC','rua da República, 51/201','São Paulo','SP');
insert into r1_cliente values ('33333333333333','Infostyle','rua da Candelária, 1250','Rio de Janeiro','RJ');
insert into r1_cliente values ('44444444444444','Amazonas Micro','rua Bela Vista, 25','Manaus','AM');
insert into r1_cliente values ('55555555555555','Riogrande Info','rua três Gaúchos, 200','Porto Alegre','RS');
insert into r1_nota_fiscal values ('C','100','11111111111111','20/09/2002','À vista');
insert into r1_nota_fiscal values ('C','101','22222222222222','27/09/2002','30 d');
insert into r1_nota_fiscal values ('C','102','33333333333333','28/09/2002','À vista');
insert into r1_nota_fiscal values ('C','103','44444444444444','29/09/2002','60 d');
insert into r1_nota_fiscal values ('C','104','55555555555555','29/09/2002','À vista');
insert into r1_nota_fiscal values ('C','105','22222222222222','01/10/2002','30 d');
insert into r1_produto values ('MIC001','Microcomputador 1 Ghz, 64 MB','10',1790.00,50.00);
insert into r1_produto values ('MIC002','Microcomputador 1,3 Ghz, 128MB','6',2100.00,100.00);
insert into r1_produto values ('IMP001','Impressora Epson C20sx','4',250.00,10.00);
insert into r1_produto values ('IMP002','Impressora Epson C60sx','5',360.00,20.00);
insert into r1_produto values ('IMP003','Impressora Lexmark Z53','3',399.00,0);
insert into r1_produto values ('MON001','AOC Spectrum 4vn (14")','6',300.00,25.00);
insert into r1_produto values ('MON002','Samsung Syncmaster 15"','4',499.00,30.00);
insert into r1_produto values ('EST001','Estabilizador','20',35.00,0);
insert into r1_item_nf values ('C','100','IMP001',240.00,'2');
insert into r1_item_nf values ('C','100','MIC002',2000.00,'1');
insert into r1_item_nf values ('C','101','IMP002',360.00,'3');
insert into r1_item_nf values ('C','101','MON001',300.00,'4');
insert into r1_item_nf values ('C','101','MON002',499.00,'1');
insert into r1_item_nf values ('C','101','EST001',35.00,'2');
insert into r1_item_nf values ('C','102','MIC001',1740.00,'1');
insert into r1_item_nf values ('C','102','IMP002',340.00,'1');
insert into r1_item_nf values ('C','102','MON001',275.00,'2');
insert into r1_item_nf values ('C','102','MON002',469.00,'1');
insert into r1_item_nf values ('C','103','MIC001',1790.00,'10');
insert into r1_item_nf values ('C','103','MIC002',2100.00,'5');
insert into r1_item_nf values ('C','103','IMP001',250.00,'6');
insert into r1_item_nf values ('C','103','IMP002',360.00,'2');
insert into r1_item_nf values ('C','103','MON001',300.00,'3');
insert into r1_item_nf values ('C','103','EST001',35.00,'20');
insert into r1_item_nf values ('C','104','EST001',35.00,'10');
insert into r1_item_nf values ('C','105','MIC001',1790.00,'2');
insert into r1_item_nf values ('C','105','MON001',300.00,'2');
commit;
Baseado no esquema acima, responda àsperguntas:
1. Quantas unidades de microcomputadores (produtos MIC001 e MIC002) foram vendidas nototal?
SELECT SUM(I.QUANTIDADE) TOTAL
FROM r1_item_nf I
WHERE I.r1_produtoO IN ('MIC001', 'MIC002');
2. Quanto o valor total dos descontos dados nas vendas do item MIC001?
SELECT SUM(P.DESCONTO * I.QUANTIDADE) TOTAL_DESCONTO
FROM r1_produto P, r1_item_nf I
WHERE P.CODIGO=I.r1_produtoAND P.CODIGO='MIC001';
3. Quais produtos venderam mais unidades em setembro?
SELECT item.produto, SUM(item.quantidade) as qtd
FROM r1_item_nf item
GROUP BY item.produto);
4. Quais produtos não tiveram venda em setembro?
SELECT p.descricao
FROM r1_item_nf item, r1_produto p, r7_soma
WHERE p.codigo = r7_soma.produto ANDr7_soma.qtd = (select max(qtd) from r7_soma)GROUP BY p.descricao;
5. Qual foi o valor total das vendas em setembro, excluindo microcomputadores?
SELECT SUM(I.PRECO * I.QUANTIDADE) T_VENDAS
FROM r1_item_nf I, r1_nota_fiscal N
WHERE I.NUMERO=N.NUMERO AND TO_CHAR(N.DATA,'MM') = '09' AND I.r1_produto NOT IN ('MIC001', 'MIC002');
6. Quais produtos têm preço maior que 300,00 e possuem mais de 4 unidades em estoque?
SELECT P.DESCRICAO, P.PRECO, P.ESTOQUE
FROM r1_produto P
WHERE P.PRECO > 300 AND P.ESTOQUE > 4;
7. Quantos produtos foram vendidos para fora do estado de Minas Gerais em setembro?
SELECT SUM(I.QUANTIDADE) QTD_PROD
FROM r1_item_nf I, r1_nota_fiscal N, r1_cliente C
WHERE I.NUMERO=N.NUMERO AND N.CGC=C.CGCAND TO_CHAR(N.DATA,'MM') = '09' AND C.UF <> 'MG';
8. Que cliente comprou mais unidades do produto MIC001?
SELECT C.RAZAO
FROM r1_cliente C, r1_item_nf I, r1_nota_fiscal N
WHERE I.NUMERO=N.NUMERO AND N.CGC=C.CGCAND I.r1_produto = 'MIC001'AND I.QUANTIDADE = (SELECT MAX(I.QUANTIDADE) FROM r1_item_nf I WHERE I.r1_produto = 'MIC001');
9. Que cliente comprou mais unidades do produto IMP002?
SELECT C.RAZAO
FROM r1_cliente C, r1_item_nf I, r1_nota_fiscal N
WHERE I.NUMERO=N.NUMEROAND N.CGC=C.CGC AND I.r1_produto = 'IMP002' AND I.QUANTIDADE = (SELECT MAX(I.QUANTIDADE) FROM r1_item_nf I WHERE I.r1_produto = 'IMP002');
Banco de Dados Exercício 3
1. Selecionar o nome das editoras que publicaram livros do autor “BOOCH”.
SELECT E.NOMEEDIT
FROM EDITORA E , LIVRO L, AUTORIA A , AUTOR
WHERE AUTOR.NOMEAUT = ' BOOCH ' AND E.CODIGO=L.CODEDIT AND L.CODIGO=A.CODLIVRO AND A.CODAUTOR=AUTOR.CODIGO;
2. Selecionar o nome dos usuários que pegaram 2 ou mais livros no ano de 2003.
SELECT A.NOME, COUNT(*)
FROM ALUNO A, EMPRESTIMO E, ITEMEMPREST I
WHERE A.CODIGO=E.CODALUNO AND
E.CODEMPREST=I.CODEMPREST
AND TO_CHAR(E.DATA,'YYYY')=2003
HAVING COUNT(*) >= 2
3. Selecionar o titulo dos livros que não foram emprestados em 2002.
SELECT L.TITULO
FROM LIVRO WHERE L.CODIGO NOT IN
( SELECT L.CODIGO
FROM LIVRO L , EXEMPLAR E, ITEMEMPREST I, EMPRESTI EMP
WHERE L.CODIGO=E.CODLIVRO AND E.CODEXEMPLAR=I.CODEMPREST AND I.CODEMPREST=EMP.CODEMPREST
AND TO_CHAR(EMP.DATA,'YYYY')=2002 )
4. Selecionar o nome da editora e o número de livros publicados, para as editoras que publicaram dois ou mais livros.
SELECT E.NOMEEDITORA, COUNT(L.CODLIVRO) AS NUM_LIVROS
FROM R6_EDITORA E, R6_LIVRO L
WHERE E.CODEDITORA = L.CODEDITORA
GROUP BY E.NOMEEDITORAHAVING COUNT(L.CODLIVRO) >= 2;
5. Selecionar a menor idade, a maior idade e a idade média dos usuários.
SELECT ROUND(MIN(MONTHS_BETWEEN(SYSDATE, U.DATANASC)/12)) AS MENOR,ROUND(MAX(MONTHS_BETWEEN(SYSDATE, U.DATANASC)/12)) AS MAIOR, ROUND(AVG(MONTHS_BETWEEN(SYSDATE, U.DATANASC)/12)) AS MEDIA
FROM R6_USUARIO U;
6. Selecionar o nome dos autores que não publicaram livros pela editora "CAMPUS".
SELECT A.NOMEAUTOR
FROM R6_AUTOR A, R6_AUTORIA AU, R6_EDITORA E, R6_LIVRO L
WHERE A.CODAUTOR = AU.CODAUTOR AND E.CODEDITORA = L.CODEDITORA AND AU.CODLIVRO = L.CODLIVRO AND E.NOMEEDITORA <> 'CAMPUS';
7. Selecionar o nome do usuário, o titulo do livro, e a data de empréstimo para os livros pertencentes à editora "LTC" ou que pertencem ao assunto "BANCO DE DADOS".
SELECT U.NOMEALUNO, L.TITULO, E.DATAEMPREST
FROM R6_ALUNO U,R6_LIVRO L, R6_EMPRESTIMO E,R6_EDITORA ED,R6_ASSUNTO A
WHERE ED.CODEDITORA = L.CODEDITORA AND L.CODASSUNTO = A.CODASSUNTO AND E.CODALUNO = U.CODALUNOAND (ED.NOMEEDITORA = 'LTC' OR A.DESCRICAO = 'BANCO DE DADOS');
8. Excluir os livros que nunca foram emprestados.
DELETE FROM R6_LIVRO LWHERE L.CODLIVRO NOT IN (SELECT L.CODLIVRO FROM R6_LIVRO L,R6_EXEMPLAR EX,R6_ITEMEMPREST I WHERE I.CODEXEMPLAR = EX.CODEXEMPLAR AND EX.CODLIVRO = L.CODLIVRO GROUP BY L.CODLIVRO);
9. Transferir os livros da editora “CAMPUS” para a editoras “MAKRON BOOKS”.
UPDATE R6_LIVRO SET CODEDITORA =
(SELECT CODEDITORA FROM R6_EDITORA WHERE NOMEEDITORA = 'MAKRON BOOKS') WHERE CODEDITORA = (SELECT CODEDITORA FROM R6_EDITORA WHERE NOMEEDITORA = 'CAMPUS')
10. Selecionar o titulo dos livros com o maior número de empréstimos no ano de 2003.
SELECT L.TITULO , MAX(COUNT(CODLIVRO))
FROM LIVRO L , EXEMPLAR E, ITEMEMPREST I, EMPRESTI EMP
WHERE L.CODIGO=E.CODLIVRO AND E.CODEXEMPLAR=I.CODEMPREST AND I.CODEMPREST=EMP.CODEMPREST;