terça-feira, 3 de março de 2015

Aula 3 - Certificação 1Z0-051

RESPOSTAS DA AULA ANTERIOR

1- SELECT last_name, salary, department_id
FROM employees
where last_name like 'S_i%' and
department_id ^= 50
order by salary;


2- SELECT last_name, salary
FROM employees
where salary between 2000 and 3500
and salary*1.1 < 3500
order by salary;



3- SELECT first_name "Nome",
       last_name "Sobrenome",
       salary "Salário",
       department_id "Departamento",
       job_id "Cargo"
FROM employees
where first_name = '&Nome' or
employee_id = '&ID'
order by salary;


------------------------------------------------------------

Funções

As funções são usadas para converter ou manipular valores de dados tornando uma consulta ao Banco de Dados muito mais eficiente. 

Funções podem ser usadas para:
  • Executar cálculos de dados;
  • Modificar itens individuais;
  • Manipular a saída para grupos de linhas;
  • Formatar números e datas para exibição;
  • Converter tipos de dados.
Primeiramente, há dois tipos de funções linha: as funções de uma linha e as funções de várias linhas (também conhecidas por funções de grupo). 


Funções de linha

As funções de uma única linha sempre retornam um valor, mas nem sempre aceitam argumentos. Manipulam itens de dados. Elas atuam em cada linha retornada do BD. Retornam apenas um resultado por linha. Podem modificar o tipo de dados do registro retornado. Elas podem ser aninhadas. Seus argumentos podem ser uma constante fornecida pelo usuário, um nome de coluna, um valor de variável ou uma expressão e podem ser usadas SELECT, WHERE e ORDER BY.


Iremos abordar as funções de caracteres, números e datas nesta aula.


Funções de caractere

As funções de caractere aceitam a entrada de caracteres e podem retornar valores de caractere ou de números. Algumas das funções são as seguintes:

CONVERSÃO
  • LOWER - converte todos os caracteres do campo para minúsculo; 
Ex.: SELECT LOWER(oracle) FROM dual; Resultado: oracle
  • UPPER- converte todos os caracteres do campo para maiúsculo; 
Ex.: SELECT UPPER(oracle) FROM dualResultado: ORACLE
  • INITCAP - converte a primeira letra de cada palavra no campo em maiúsculo e as demais em minúsculo.
Ex.: SELECT INITCAP(oracle) FROM dual Resultado: Oracle

Obs: dual é uma tabela interna utilizada para cálculos ou buscas fictícias de teste;

São demasiadamente utilizadas para converter valores informados em uma consulta, antes de realizar a busca no Banco de Dados. Por exemplo, os nomes de funcionários são cadastrados no sistema sem padronização ou padronização desconhecida, como o nome = 'Fulano' e sobrenome = 'sicrano de beltrano'. Porém quando realizamos uma busca simples podemos não encontrar o registro esperado:

 SELECT nome sobrenome FROM empregados WHERE nome = 'fulano';

O resultado é: nenhum registro encontrado!

Usando as funções de caractere podemos converter o resultado da busca, o valor a ser buscado no BD e  o valor informado.

 SELECT upper(last_name) FROM employees WHERE upper(last_name) = upper('king');



MANIPULAÇÃO
  • SUBSTR - extrai uma string de tamanho determinado usando argumentos;
 SELECT SUBSTR('EXTRAIR_STRING', 1, 7) FROM dual; = EXTRAIR

Obs.: o parâmetro ('String',-1, 1) traz o último caractere e assim por diante;

  • INSTR - localiza uma posição numérica e pode receber mais argumentos para especificar uma posição;
 SELECT INSTR('ACHAR_H', 'H') FROM dual; = 3

OU

 SELECT INSTR('ACHAR_H', 'H', 4) FROM dual; = 7

  • CONCAT - concatena no máximo dois valores informados;
 SELECT CONCAT('VALOR_1', 'VALOR_02') FROM dual; VALOR_1VALOR_02

Obs.: para concatenar mais de dois valores use a barra vertical dupla (||);

  • LENGTH - conta o número total de caracteres no dado informado, inclusive espaçamentos;
 SELECT LENGTH('VALOR ') FROM dual; = 6

  • LPAD - retorna uma expressão de caractere preenchida à esquerda, onde é informado o tamanho total da string e o caractere que irá preencher o espaço;
 SELECT LPAD ('VALOR', 10, '*') FROM dual; = *****VALOR

  • RPAD - retorna uma expressão de caractere preenchida à direita , onde é informado o tamanho total da string e o caractere que irá preencher o espaço;
 SELECT RPAD ('VALOR', 10, '*') FROM dual; = VALOR*****

  • TRIM - retira os caracteres informados no argumento, podendo retirar somente os da esquerda (LEADING), da direita (TRAILING) ou ambos (BOTH);
 SELECT TRIM( trailing 'O' FROM 'O RESULTADOOO') FROM dual; = O RESULTAD

  • REPLACE - substitui uma determinada string por outra previamente informada.
 SELECT REPLACE( 'RESULTADO', 'RE', 'IN') FROM dual; = INSULTADO


Funções de número

As funções de número aceitam somente valores numéricos e retornam números.  Algumas das funções são as seguintes:


  • ROUND - arredonda um determinado valor, podendo ser informado o número de decimais (números após o ponto) ou não. Caso não seja especificado, por padrão não haverão números após o ponto;
SELECT ROUND( 1862.55 ) FROM dual; = 1863

OU

SELECT ROUND( 1862.55, 1 ) FROM dual; = 1862.6

OU AINDA

SELECT ROUND( 1862.55, -1 ) FROM dual; = 1860

  • TRUNC - trunca o valor do registro numérico, podendo ser informado o número de decimais (números após o ponto) ou não. Caso não seja especificado, por padrão não haverão números após o ponto;
SELECT TRUNC( 1862.55 ) FROM dual; = 1862

OU

SELECT TRUNC( 1862.55, 1 ) FROM dual; = 1862.5

OU AINDA

SELECT TRUNC( 1862.55, -2 ) FROM dual; = 1800

  • MOD - retorna o resto de uma divisão;
SELECT MOD( 1500, 400 ) FROM dual; = 300


Curiosidade: esta função normalmente é utilizada para definir se o número é ímpar ou par e ela também é utilizada pelo Oracle como função de hash.


Funções de data

As funções de data aceitam valores do tipo DATE e retornam o mesmo tipo de dado informado, com exceção da função MONTHS_BETWEEN, que retorna um número referente aos meses entre um período e outro. Algumas das funções são as seguintes:


domingo, 1 de março de 2015

Aula 2 - Certificação 1Z0-051

RESPOSTAS DA AULA ANTERIOR

1 - select last_name, salary, salary*1.06 "Salário Atualizado" from employees;



2- desc departments;

select distinct q'(Department's ID )' || department_id "Número do Departamento" 
from employees;



3- select  EMPLOYEE_ID || ', ' ||
  FIRST_NAME || ', ' ||
  LAST_NAME || ', ' ||
  EMAIL || ', ' ||
  PHONE_NUMBER || ', ' ||
  HIRE_DATE || ', ' ||
  JOB_ID || ', ' ||
  SALARY || ', ' ||
  COMMISSION_PCT || ', ' ||
  MANAGER_ID || ', ' ||
  DEPARTMENT_ID  "INFORMAÇÕES DO EMPREGADO"
from employees;


Obs.: o último exercício apresentou um erro proposital porque o tamanho máximo que um identificador de coluna pode ter são 30 caracteres. Caso você tenha identificado esse erro antes de vir às respostas, PARABÉNS!

-------------------------------------------------------------------------

Cláusula WHERE

Se for preciso restringir linhas de uma consulta, usamos a cláusula WHERE. Ela vem sempre após a palavra chave FROM.

Podemos usar vários tipos de operadores numa consulta dessas, como operadores aritméticos, operadores de concatenação, operadores de comparação, LIKE, BETWEEN, NULL e operadores lógicos.

SELECT coluna(s) FROM tabela WHERE condição;

Suponhamos um cenário de Recursos Humanos, onde desejam recuperar do BD apenas aqueles funcionários que possuem o cargo de vendedor.

Sabemos de antemão que o ID deste respectivo cargo é SA_REP (Representante de Vendas), assim podemos buscar no BD apenas os funcionários que possuem esse JOB_ID.

SELECT last_name, job_id FROM employees WHERE job_id = 'SA_REP';


O condicionamento é sensitive case, portanto a  palavra que buscamos no BD deve ser idêntica àquela que referenciamos na consulta, caso contrário há possibilidade da consulta não trazer os dados ou pior, trazer dados errados.

Quando condicionamos palavras, estas devem vir entre aspas simples, obrigatoriamente. E não é possível apelidarmos uma condição numa cláusula WHERE.

Se quisermos procurar por uma data específica, podemos realizar a seguinte consulta:

SELECT last_name, hire_date FROM employees WHERE hire_date = '17-JUN-03';

Datas possuem o formato padrão DD-MON-RR, podendo ser alterado no BD, no SQL Developer ou localmente nas configurações da estação de trabalho. São configurações diferentes e não surtem o mesmo efeito. Falaremos sobre elas mais pra frente.


Operadores de Comparação

Quem já está acostumado com desenvolvimento de softwares e sistemas ou mesmo o portugol do primeiro semestre da faculdade, não enfrentará dificuldades em associar esses operadores na hora da construção de uma instrução envolvendo expressões lógicas.

Os operadores reconhecidos pelo Oracle são:

=  significa: IGUAL AO VALOR;
>  significa: MAIOR DO QUE O VALOR;
>=  significa: MAIOR OU IGUAL AO VALOR;
<  significa: MENOR DO QUE O VALOR;
<=  significa: MENOR OU IGUAL AO VALOR;
<> ou != ou ^=  significa: DIFERENTE DO VALOR;
BETWEEN ... AND ...  significa: ENTRE UM VALOR E OUTRO;
NOT BETWEEN ... AND ...  significa: NÃO ESTÁ ENTRE UM VALOR E OUTRO; 
IN ( valores )  significa: VERDADEIRO SE O VALOR ESTIVER DENTRO DOS PARÊNTESES;
NOT IN ( valores )  significa: VERDADEIRO SE O VALOR NÃO ESTIVER DENTRO DOS PARÊNTESES;
LIKE  significa: COMPARAÇÃO DE STRINGS (POSITIVA);
NOT LIKE  significa: COMPARAÇÃO DE STRINGS (NEGATIVA);
IS NULL  significa: VERIFICA SE O VALOR É NULO;
IS NOT NULL significa: VERIFICA SE O VALOR NÃO É NULO.

Caso desejemos recuperar apenas os dados dos funcionários que ganhem entre 2.000 e 5.000, usamos a seguinte instrução:

SELECT * FROM employees WHERE salary BETWEEN 2000 and 5000;


Quando queremos saber quais funcionários NÃO ganham salários de 2.400, 4.000 ou 2.600:

SELECT * FROM employees WHERE salary NOT IN( 4000, 2400, 2600 );


Recuperar somente os dados dos funcionários que ganhem comissão:

SELECT * FROM employees WHERE commission_pct IS NOT NULL;


Ou então recuperar os dados daqueles funcionários que tenham o sobrenome Abel sem usar o comparador IGUAL:

SELECT * FROM employees WHERE last_name like 'Abel';


O operador LIKE possui dois caracteres coringas que podem ser usados na comparação de strings que ele faz.

% significa: RETORNA ZERO OU MUITOS CARACTERES;
_ significa: SUBSTITUI UM CARACTERE.

 SELECT * FROM employees WHERE last_name like 'K_n%';



A instrução acima procura no BD apenas empregados que possuem a primeira letra do sobrenome 'K' maiúsculo, seguida de uma letra desconhecida, depois um 'n' minúsculo e o restante também desconhecido.

 SELECT * FROM employees WHERE last_name like '%h%';



A instrução acima retorna somente aqueles empregados que possuem 'h' minúsculo em seus sobrenomes.

Caso o seu BD possua esses caracteres curingas em seus registros, podemos usar um identificador ESCAPE para informar ao BD que esse caractere não é curinga. A forma de usar o identificador ESCAPE é a seguinte:

SELECT last_name, job_id FROM employees WHERE job_id LIKE 'SA/_%' ESCAPE '/';

O banco desconsiderará o primeiro caractere curinga na instrução acima, mas o segundo não teve alteração de uso. O identificador pode ser qualquer caractere, tendo apenas que ser referenciado entre aspas simples após a palavra chave ESCAPE.

Sugiro que teste algumas das possibilidades de utilização destes e dos próximos operadores para familiarizar-se com eles, pois utilizaremo-os com frequência a partir desta aula.


Operadores Lógicos

Operadores lógicos são utilizados para retornar um valor somente se o resultado geral da condição for verdadeiro.

AND significa: retorna VERDADE se as duas condições forem VERDADEIRAS.
OR significa: retorna VERDADE se pelo menos uma das condições for VERDADEIRA.
NOT significa: retorna VERDADE caso a condição seja FALSA.

Cogitemos a hipótese de precisar buscar no banco funcionários que trabalhem no departamento 90, mas que, necessariamente, também recebam salário de 17.000 e tenham o JOB_ID  AD_VP.

SELECT last_name, department_id, salary, job_id
FROM employees
WHERE department_id = 90 AND
salary = 17000  OR 
salary = 19000 AND
job_id = 'AD_VP' AND NOT 
last_name='Kochhar';


Perceba que mesmo eu especificando na última condição o NÃO aparecimento do empregado Kochhar ele veio mesmo assim. Há uma precedência sobre todos os operadores, como na matemática.

Primeiro o Oracle irá resolver os operadores lógicos NOT, posteriormente os AND e por fim os OR.

Sendo assim, primeiro ele vai separar quem NÃO É Kochhar, em seguida quem é do departamento 90 E ganha 17.000, depois quem ganha 19.000 E tem o job_id AD_VP. Por fim irá trazer TODOS que se qualificam na condição de departamento E salário OU nas outras. Como Kochhar já está qualificado em uma das condições a última condição é 'anulada'.

Obs.: a segunda condição não afeta nenhuma linha do BD, está lá apenas para fazer volume, pois é deste jeito que as perguntas caem na prova de certificação Oracle.

A precedência de todos os operadores é a seguinte:



Cláusula Order By

Por padrão, a classificação sempre é indefinida e o Oracle nunca traz a mesma formação por duas vezes seguidas.

 SELECT last_name, job_id FROM employees;


Mas podemos alterá-la usando a cláusula ORDER BY.

SELECT last_name, job_id
FROM employees
ORDER BY job_id;


Podemos usar o apelido da coluna no ordenamento 

SELECT last_name, job_id numero
FROM employees
ORDER BY numero;

ou então o número de sua posição. 

SELECT last_name, job_id numero
FROM employees
ORDER BY 2;

Em todos os casos obteremos o mesmo resultado. Ainda é possível definir de queremos uma classificação Descendente (DESC) ou Ascendente (ASC, padrão). É bom enfatizar que a cláusula ORDER BY deve, obrigatoriamente, ser a última cláusula de cada instrução.

SELECT last_name, job_id numero
FROM employees
ORDER BY 2 DESC;


Podemos dizer para o Oracle trazer-nos primeiro os valores nulos com a palavra chave NULLS FIRST ou por último com a palavra chave NULLS LAST:

SELECT last_name, commission_pct
FROM employees
ORDER BY 2 DESC NULLS FIRST;

Classifica-se por mais de uma coluna também, como se segue:

SELECT last_name, commission_pct, department_id
FROM employees
ORDER BY last_name, department_id;


Variáveis de Substituição 

As variáveis de substituição servem para não precisar ser informado o mesmo valor mais de uma vez pelo usuário ou numa consulta rotineira ao BD.

A variável armazena um valor temporário, alternando o seu conteúdo conforme novos valores forem sendo informados.

Elas podem ser utilizadas para complementação de condições WHERE, cláusulas ORDER BY,expressões de coluna, nomes de tabela e instruções SELECT inteiras.

Há duas maneiras de declarar variáveis no SQL Developer ou SQLPlus:
  • Utilizando um E comercial (&)  antes de um identificador, por exemplo '&Variavel', que irá guardar o valor informado, utilizá-lo na instrução e depois descartá-lo;
SELECT last_name, commission_pct, department_id, &Nome_Tabela
FROM employees
ORDER BY &Ordenar_Por;

  • Utilizando dois E comerciais (&&) antes de um identificador, por exemplo '&&Variavel', que irá guardar o valor informado, utilizá-lo na instrução, não irá mais solicitar um novo valor e só irá descartá-lo se a sessão for encerrada ou a cláusula UNDEFINE for utilizada.
SELECT last_name, commission_pct, department_id, &&Nome_Tabela
FROM employees
ORDER BY &Nome_Tabela;

UNDEFINE Nome_Tabela;

Para valores de datas e caracteres, aspas simples necessariamente precisam ser utilizadas.

SELECT last_name, commission_pct, department_id, &Nome_Tabela
FROM employees
WHERE last_name = '&Nome_Peao' 
ORDER BY &Nome_Tabela;


Podemos definir um valor padrão para uma variável usando a cláusula DEFINE e descartar o valor na variável com a cláusula UNDEFINE.

DEFINE empregado_num = 200;
SELECT last_name, commission_pct, department_id
FROM employees
WHERE employee_id= &empregado_num;

UNDEFINE empregado_num;

Utilizando o comando VERIFY podemos ver o valor da variável e toda a instrução utilizada, tanto a nova quanto a antiga, quando não havia um valor a ela associado. Para ver o resultado deste comando pressione F5 ao invés de F9.

SET VERIFY ON
SELECT last_name, commission_pct, &departamento
FROM employees;


Obs.: uma variável de substituição pode ser utilizada em qualquer lugar numa instrução SELECT, menos como primeira palavra inserida no prompt. A utilização de variáveis de substituição pode gerar riscos ao BD por possibilitar ataques de injeção SQL.



QUESTIONÁRIO

1- O RH precisa de uma instrução que traga do BD todos os nomes que contenham a letra 'S' em suas iniciais e a terceira contenha a letra 'i', mas que não trabalhem no departamento 50. Ordene as colunas por salário.

2- Traga do BD somente aqueles funcionários que ganhem entre 2.500 e 3.500, mas mostre aqueles que quando acrescentado 10% ao salário exceda 3.500.  Ordene as colunas por salário.

3- O Departamento Pessoal precisa de uma query padrão que eles possam utilizar para procurar empregados pelo seu ID ou Nome. A instrução deve necessariamente conter nome, sobrenome, salário, departamento e cargo. As colunas deverão ser renomeadas para português. Ordene as colunas por salário.

quarta-feira, 18 de fevereiro de 2015

Aula 1 - Certificação 1Z0-051

O domínio sobre a linguagem SQL (Structured Query Language) é o básico que um DBA precisa ter para recuperar informações do Banco de Dados.

O SQL é composto por 5 linguagens: DDL (Data Definition Language), DML (Data Manipulation Language), DQL (Data Query Language), DCL (Data Control Language) e DTL (Data Transaction Language).

Contudo a Oracle entende que a instrução SELECT está no conjunto de instruções DML, e não na DQL, que seria uma linguagem à parte que abordaria somente esta instrução. De fato podemos manipular dados com a instrução SELECT, portanto, para que possamos continuar essa primeira aula, a teoria sobre a linguagem DQL está eliminada.

A cada final de aula farei 3 (três) perguntas relacionadas à aula em questão e, possivelmente, às anteriores.

DML - Linguagem de Manipulação de Dados


Essa linguagem é composta pelas seguintes instruções:

Insert - Instrução usada para inserção de dados em tabelas;
Update - Instrução usada para atualização de dados contidos em tabelas;
Delete - Instrução usada para deletar dados contidos em tabelas;
Select - Instrução usada para recuperar dados contidos em tabelas;
Merge - Instrução usada para comparar e atualizar tabelas, deixando-as idênticas.

Logicamente a instrução mais complexa é a SELECT, pois dispõem de uma variedade de possibilidades para elaboração de consultas, portanto será a primeira a ser estudada.

Os recursos possíveis usando uma instrução SELECT são:

Projeção - retorna algumas ou todas as colunas, conforme a necessidade.

Seleção - retorna apenas as linhas(ou tuplas) que você queira.

Join - retorna dados armazenados em tabelas distintas.



Instrução SELECT simples

  SELECT coluna(s) FROM tabela;

O SELECT identifica as colunas que devem ser retornadas, enquanto o FROM identifica qual tabela você deseja que o Oracle consulte.

Você pode suprimir duplicação usando a cláusula DISTINCT ou seu sinônimo UNIQUE:

  SELECT DISTINCT coluna(s) FROM tabela;

ou

 SELECT UNIQUE coluna(s) FROM tabela;

ou mandar o Oracle retornar todas as colunas da tabela usando a seguinte instrução:

  SELECT * FROM tabela;

Tente realizar a seguinte consulta em seu BD Oracle:

  SELECT * FROM departments;



Obs.: 
1- As instruções SQL não são sensitive case, ou seja, não fazem diferenciação entre palavras maiúsculas ou minúsculas; 
2 - No programa SQL Developer, o ponto e vírgula(;), ao final das instruções, é opcional; 
3 - É possível pressionar F9 para mostrar o resultado em Grid (Query Result) ou F5 para mostrar em Script (Script Output).


Expressões e operadores

Podemos utilizar operadores aritméticos em instruções SQL, como Adição(+), Subtração(-), Multiplicação(*) e Divisão(/).

É muito comum precisarmos prever como seria um determinado resultado usando operações aritméticas em campos numéricos ou mesmo utilizar esses operadores em outras instruções DML, como INSERT e UPDATE.

Por exemplo, façamos a seguinte consulta no banco para recuperar as informações de salário e sobrenome de todos os funcionários e também uma coluna mostrando seu salário com uma subtração provinda de impostos que totalizam 20% do salário base:

 SELECT last_name, salary, salary*0.8 FROM employees;

ou

 SELECT last_name, salary, salary/100*80 FROM employees;

como preferir.



Observe que essa nova coluna não pertence à tabela de forma alguma, ela é uma coluna temporária criada para mostrar um resultado de alguma operação casual.

Agora, por sua conta, mostre a diferença entre o salário antigo e o novo salário com os descontos.

O resultado deve ser este:


A precedência dos operadores aritméticos em instruções SQL têm as mesmas regras da matemática, divisão e multiplicação vêm primeiro, seguidas da adição e subtração, sempre sendo resolvidas da esquerda para a direita, mas podem sofrer mudança de ordem quando são adicionados parênteses à consulta.

 SELECT last_name, 1.5 * salary + 500  FROM employees; 

é diferente de 

 SELECT last_name, 1.5 * (salary + 500)  FROM employees; 

Devemos tomar cuidado com operações aritméticas quando há a possibilidade de encontrarmos registros NULOS. Nulo não é a mesma coisa que 0 ou espaço em branco. Nulo é simplesmente Nulo para o banco, um valor indisponível, não aplicável. Quando retornado de consulta que contenha operador aritmético o resultado será NULO também.

Faça o teste com os atributos SALARY e COMMISSION_PCT do nosso esquema de testes HR. Todos os registros que tiverem comissão Nula retornará um valor literal NULL como resultado.

 SELECT last_name, salary, commission_pct, salary+commission_pct FROM employees;


Nomeando uma Coluna

Muitas vezes nos deparamos com nomenclaturas padronizadas que não fazem muito sentido para outrem que não esteja familiarizado com a categorização interna de nomeação de esquemas e tabelas no Banco de Dados. Visando este cenário, ou apenas a possibilidade do próprio DBA ter mais facilidade em distinguir os campos de sua consulta, há possibilidade de nomear qualquer coluna em uma consulta realizada naquele momento. Logicamente essa nomeação é temporária e não afeta o nome original dos campos.

A sintaxe é simples:

 SELECT last_name AS nome FROM employees;

ou sem a palavra opcional 'AS'

 SELECT last_name nome FROM employees;

ou então entre aspas duplas

 SELECT last_name "nome" FROM employees;

Utilizamos aspas duplas quando queremos que apareça na coluna exatamente aquilo que escrevemos, por exemplo:

 SELECT last_name "É o $nome$ do #Empregado#" FROM employees;


Operador de Concatenação

A concatenação é realizada utilizando duas barras verticais entre as colunas, resultando em uma expressão de caractere:

  SELECT last_name || department_id concatenando FROM employees;

As colunas são combinadas para criar uma única saída no visualizador. Podemos utilizar a palavra-chave AS antes do nome 'concatenando' para facilitar a leitura da instrução SELECT, mas isso é opcional.

Quando uma coluna tem possíveis campos NULOS o resultado são apenas as colunas que possuem dados. A concatenação não resulta erros, apenas ignora o valor nulo e mostra os valores recuperados na instrução.

Podemos facilitar a leitura de certos resultados vindos do banco acrescentando literais de caractere à nossa instrução. Fazemos isso incrementando a nossa instrução DML com palavras entre aspas simples, apenas os literais de números não precisam de aspas. Lembre-se que cada linha retornada terá esse literal acrescentado na visualização.

  SELECT last_name || ' trabalha no departamento ' || department_id "Empregado" FROM employees;

Caso seja necessário utilizar aspas simples como literal de caractere, podemos usar o operador de cotação (q) para este fim. A sintaxe é simples e pode ser seguido de qualquer delimitador mais conveniente para o momento ou então utilizar pares de caractere como ( ), [ ], < >, etc, para facilitar o entendimento.  

  SELECT last_name || q'( é o sobre'nome de )' || first_name "Empregado" FROM employees;


Comando DESCRIBE

Há momentos que necessitamos saber qual é a estrutura de uma tabela, view ou mesmo um sinônimo existente no banco e, obviamente, que possuamos acesso. Para isto, usamos o comando DESCRIBE ou DESC.

 DESC employees;

ou

 DESCRIBE employees;

Ambos funcionam no SQL Developer da mesma forma e resultam em algo assim:




QUESTIONÁRIO

1- Virou o ano e todos os funcionários devem receber um aumento de dissídio equivalente a 6% sobre seus respectivos salários. Traga em sua instrução as colunas LAST_NAME, SALARY e o resultado do aumento. Nomeie a última coluna para Salário Atualizado, respeitando as letras maiúsculas e as minúsculas.

2- Descreva a estrutura da tabela DEPARTMENT e depois traga todos os números de departamentos da tabela EMPLOYEES, sem repetí-los. Traga cada resultado com a seguinte definição: Department's ID xx, onde xx é o número do departamento. Nomeie a coluna para Número do Departamento.

3- Recupere todos os dados da tabela EMPLOYEES separando-os por vírgula (,) numa mesma coluna e a renomeie esta coluna para TODAS AS INFORMAÇÕES DO EMPREGADO.


***Respostas na Próxima Aula***

Curso básico Oracle - Certificação 1Z0-051 (Introduction to SQL)

Primeiramente, obrigado por acessar o meu blog.

Meu nome é Douglas, sou Analista de Geomática em uma empresa de Planejamento Metropolitano aqui de São Paulo. Recentemente passei a trabalhar diretamente com Oracle 11g Spatial e programação de sistemas geoespaciais.

Estou estudando para a certificação 1Z0-051 e resolvi transcrever todas as minhas aulas em meu blog para ajudar outras pessoas, que também almejam essa certificação, e a mim mesmo, pois quando se ensina realmente se aprende.

Para acompanhar as aulas será necessário ter em seu computador uma máquina virtual com Oracle 11g e SQL Developer instalados.

1- Prepare uma máquina virtual utilizando Oracle VM VirtualBox ou Virtualização da VMware.

2- Baixe e instale o pacote Oracle Database 11g Release 2.

3- Instale também o SQL Developer e suas dependências, pois será por ele que definiremos a estrutura e manipularemos os dados do BD Oracle.

4- Crie uma conexão com o SYSTEM para poder desbloquear o usuário HR, o qual será nosso esquema de estudo para essa primeira certificação.

5- Utilize essa instrução SQL para desbloquear o esquema HR: ALTER USER HR IDENTIFIED BY password ACCOUNT UNLOCK;

Estou considerando que você, querido leitor, já tenha conhecimentos básicos de SQL ou pelo menos algum conhecimento em informática para ter chegado até esse ponto.

Finalmente a tela que deverá estar aparecendo é a seguinte:


Iremos agora para a primeira aula conceitual sobre a linguagem SQL.

domingo, 16 de fevereiro de 2014

Fliperama portátil para jogos atuais

   Recentemente visitei um Blog que ensinava como montar seu fliperama em casa passo a passo e me interessei pelo design final do equipamento. A postagem é bem antiga, mas com a tecnologia que possuímos atualmente podemos melhorar bastante esse engenhoso projeto.

   Comecei usando as medidas disponibilizadas no próprio site, afinal não tinha noção de como iria cortar as madeiras que tinha a minha disposição.


Medidas de base

   As medidas ficaram um pouco diferentes porque não comprei madeira alguma, usei as que estavam sobrando aqui.

Resultado fase 1:

Fase 1 - Lateral esquerda

Fase 1 - Tampa aberta frontal

   Já estou amaciando o mouse Trackball que será instalado na tampa do fliperama. É um ótimo Trackball, mas o problema é que a bolinha é solta, não sei se isso é comum em todos. Portanto, é melhor tomar cuidado para não perdê-la. Este componente me custou R$ 75,13, com frete, pelo Submarino. Ótimo site de compras online, entregou-o em pouco mais de 24h, em um sábado.

Trackball Kensington Orbit Óptical

   Comprei dois amortecedores de 100n (o tamanho é igual para todos, o que muda é o peso que suporta) para a tampa do Fliperama, mas percebi que somente um é suficiente. Cada amortecedor custa R$ 4,50 e é facilmente encontrado em madeireiras. O metro do Led custa aproximadamente R$ 13,00 em lojas de iluminação; esse eu comprei na Eletrica Superluz.


   O próximo passo é instalar os botões de fliperama. Comprei-os na empresa MC Play, Mooca SP, pois foi o lugar mais em conta que encontrei. Foram, no total, dois comandos, vinte botões de acrílico redondos e um botão retangular adquiridos por R$ 72,40. Pedi para um amigo ir buscar, então não estou contabilizando o frete.

   Dica: faça um desenho quadriculado de 2 x 2 cm para cada quadrado. Verá que será muito fácil organizar os botões da maneira que bem entender. A furação é de 28,5 mm.


Layout dos botões e comando

Botões e comandos


   Botões instalados e caixa pintada de preto brilhante. A lata de tinta 900 ml Lukscolor custa em média R$ 20,00 no Center Líder e existem diversas cores para escolher. Pintei usando compressor de ar da primeira vez, mas acho que teria ficado melhor pintar com rolinho de primeira. Tive que lixar quando secou a tinta porque escorreu e não ficou algo tão bonito, mas na segunda mão a pintura teve uma melhora significativa (na minha modesta opinião).

Resultado fase 2:


Fase 2 - Caixa pintada e botões instalados


   Fiz um vídeo para mostrar como ficou o trabalho até o momento. O Led está preso com fita dupla-face em 'calhas' artesanais transparentes. Não pintei o Trackball porque ele tem 5 anos de garantia, então é melhor usá-lo por muitos meses antes de customizá-lo. Vai que dá problema, né...



   Joysticks comprados pelo MercadoLivre por R$ 9,99 cada e o frete ficou em R$ 8,51. Acho que essa foi a parte mais complicada do projeto. É preciso paciência e algum conhecimento para fazer a parte da instalação das placas dos Joysticks. Mas não é impossível, e qualquer um com dedicação consegue.

   Este vídeo mostra como fazer a soldagem e testar simultaneamente os comandos.


   Após instalar e testar os controles, fiz esse vídeo para comprovar a jogabilidade de dois games diferentes. Como ainda não comprei as peças internas (placa-mãe, processador, etc.) testei o controle em um Core 2 Duo.

 
   Gostei do resultado, mas preciso testar outros jogos mais recentes que não rodam no meu computador atual devido à falta de uma boa placa de vídeo.

   Para terminar o acabamento do fliperama portátil, comprei alguns acessórios na loja online Spon. Apesar da empresa ter uma boa reputação no Reclame Aqui, os problemas são sempre os mesmos. Não cumprem o prazo de entrega dos produtos, sempre postergando a data de postagem, e não devolvem o dinheiro de imediato (não foi o meu caso, pois preferi receber os produtos). Resolveram postar minha encomenda assim que abri esta Reclamação contra eles. Os produtos deles são muito bons e achei-os em conta. O único problema é a falta de compromisso com o cliente, mas para quem não tem problemas de ansiedade, vá em frente!

Comandos instalados, filtro de FAN e FAN com leds coloridos

 LaserGrill 3D Blade 80mm e FAN com leds coloridos

LaserGrill Azul 120mm e Fitro FAN acrílico 120mm

   Gastos até o momento:

   Não resolvi ainda quais peças irei usar internamente. Estou analisando alguns componentes no site Kabum, o qual só ouço elogios sobre a sua agilidade na entrega e produtos de alta qualidade.

   Quando meu projeto andar mais alguns passos eu atualizo o Blog com dicas, valores e melhores locais para compra dos componentes em São Paulo. Até mais.