DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart...

47
DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS Fábio Roberto Octaviano

Transcript of DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart...

Page 1: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

DO BÁSICO AO AVANÇADO PARA

MANIPULAÇÃO E OTIMIZAÇÃO DE DADOS

Fábio Roberto Octaviano

Page 2: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Controlando Acesso dos Usuários

Page 3: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Após o término do Capítulo:

Diferenciar privilégios de sistema e privilégios de objetos.

Conceder privilégios em tabelas.

Verificar privilégios no Dicionário de Dados.

Dar privilégios em roles.

Distinguir entre privilégios e roles.

Page 4: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Database administrator

Users

Username and password

Privileges

Page 5: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Segurança em Banco de Dados: ◦ Segurança do Sistema ◦ Segurança de Dados

Privilégios de Sistema: conseguindo acesso ao banco de dados.

Privilégios de Objetos: manipulando o conteúdo dos objetos do banco de dados.

Esquemas: Coleção de objetos, tais como tabelas, visões e sequences.

Page 6: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Mais de 100 privilégios de sistema estão disponíveis no Oracle.

O DBA (administrador do banco) tem privilégios de sistema de alto nível para tarefas como:

◦ Criar novos usuários.

◦ Remover usuários.

◦ Remover tabelas.

◦ Fazer backup de tabelas.

Page 7: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

O DBA cria usuários por meio da instrução

CREATE USER.

CREATE USER USER1

IDENTIFIED BY USER1;

User created.

CREATE USER user

IDENTIFIED BY password;

Page 8: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Após criar um usuário, o DBA pode conceder privilégios de sistema específicos a ele.

Um desenvolvedor, por exemplo, pode ter os seguintes privilégios de sistema: ◦ CREATE SESSION

◦ CREATE TABLE

◦ CREATE SEQUENCE

◦ CREATE VIEW

◦ CREATE PROCEDURE

GRANT privilege [, privilege...]

TO user [, user| role, PUBLIC...];

Page 9: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

O DBA pode conceder privilégios de sistema específicos a ele.

GRANT create session, create table,

create sequence, create view

TO scott;

Grant succeeded.

Page 10: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Uma role é um grupo de privilégios relacionados que pode ser concedido ao usuário.

Alocando privilégios sem usar roles

Alocando privilégios utilizando roles

Privilégios

Usuários

Gerente

Page 11: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

◦ Criação de uma role:

◦ Conceder privilégios a uma role:

◦ Conceder acesso a role para os usuários :

CREATE ROLE manager;

Role created.

GRANT create table, create view

TO manager;

Grant succeeded.

GRANT manager TO BELL, KOCHHAR;

Grant succeeded.

Page 12: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Normalmente, o DBA é o responsável por criar uma conta de usuário e inicializar o password.

O usuário pode alterar seu password utilizando a instrução ALTER USER.

ALTER USER HR

IDENTIFIED BY employ;

User altered.

Page 13: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Object

Privilege Table View Sequence Procedure

ALTER

DELETE

EXECUTE

INDEX

INSERT

REFERENCES

SELECT

UPDATE

Page 14: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Tipos de privilégios de objetos variam conforme o objeto.

O dono do objeto tem todos os privilégios sobre ele.

O dono do objeto pode conceder privilégios específicos aos usuários desejados.

GRANT object_priv [(columns)]

ON object

TO {user|role|PUBLIC}

[WITH GRANT OPTION];

Page 15: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Conceda privilégio de consulta na tabela EMPLOYEES:

Conceda privilégio de atualizar colunas específicas a usuários e roles:

GRANT select

ON employees

TO sue, rich;

Grant succeeded.

GRANT update (department_name, location_id)

ON departments

TO scott, manager;

Grant succeeded.

Page 16: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Conceda ao usuário autoridade de conceder seus privilégios sobre o objeto:

Permita que todos os usuários do sistema consulte dados da tabela DEPARTMENTS do esquema Alice:

GRANT select, insert

ON departments

TO scott

WITH GRANT OPTION;

Grant succeeded.

GRANT select

ON alice.departments

TO PUBLIC;

Grant succeeded.

Page 17: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Visão do DD Descrição

ROLE_SYS_PRIVS Privilégos de sistema dados a roles

ROLE_TAB_PRIVS Privilégos de tabela dados a roles

USER_ROLE_PRIVS Roles acessíveis ao usuário

USER_TAB_PRIVS_MADE Privilégios de objeto dados sobre os

objetos do usuário

USER_TAB_PRIVS_RECD Privilégios de objeto dados ao usuário

USER_COL_PRIVS_MADE Privilégios de objeto dados sobre as

colunas dos objetos do usuário

USER_COL_PRIVS_RECD Privilégios de objeto dados sobre as

colunas dos objetos para o usuário

USER_SYS_PRIVS Privilégos de sistema dados ao usuário

Page 18: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Para revogar privilégios concedidos a outros usuários, utilize a instrução REVOKE:

Privilégios concedidos a outros usuários por meio da cláusula WITH GRANT OPTION são também revogados:

REVOKE {privilege [, privilege...]|ALL}

ON object

FROM {user[, user...]|role|PUBLIC}

[CASCADE CONSTRAINTS];

Page 19: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Como usuário Alice, revogue os privilégios SELECT e INSERT da tabela DEPARTMENTS concedidos ao usuário Scott:

REVOKE select, insert ON departments

FROM scott;

Revoke succeeded.

Page 20: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Resumo dos principais comandos para controle de usuários e privilégios:

Comando Ação

CREATE USER Cria um usuário (normalmente por DBA)

GRANT Concede privilégios sobre objetos a outros

usuários

CREATE ROLE Cria uma coleção de privilégios

(normalmente executado por um DBA)

ALTER USER Modifica o password de um usuário

REVOKE Revoga privilégios sobre objetos de usuário

Page 21: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Objetivos:

◦ Conceder privilégios de tabela a usuários.

◦ Modificar tabelas de outro usuário por meio de

privilégios recebidos.

◦ Criação de um sinônimo.

◦ Consultando as visões do Dicionário de Dados

relacionadas a privilégios.

Page 22: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

1. Qual privilégio um usuário deve receber para conseguir fazer login no servidor Oracle? Ele é um privilégio de sistema ou de objeto?

2. Qual privilégio um usuário deve receber para conseguir criar tabelas?

3. Se você criar uma tabela, quem pode conceder privilégios sobre sua tabela a outros usuários?

Page 23: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

4. Você é o DBA e está criando muitos usuários que requerem os mesmos privilégios de sistema. O que você deveria utilizar para tornar seu trabalho mais fácil?

5. Qual comando você deve utilizar para alterar seu próprio password?

Page 24: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

6. Conceda a outro usuário acesso à sua tabela DEPARTMENTS e peça a ele que conceda acesso à tabela DEPARTMENTS dele. Consulte os dados de ambas as tabelas DEPARTMENTS.

GRANT SELECT ON departments TO oraxx

Page 25: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

7. Adicione uma nova linha para SUA tabela DEPARTMENTS. Time 1 deve adicionar a linha Educação como departamento 500. Time 2 deve adicionar Finanças como departamento 510. Consulte a tabela do seu colega.

INSERT INTO departments VALUES (500, 'Educacao');

COMMIT;

-- OU, para o outro time:

INSERT INTO departments VALUES (510, ‘Financas');

COMMIT;

Page 26: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

8. Crie um sinônimo para a tabela DEPARTMENTS do outro usuário. Depois consulte a tabela DEPARTMENTS do seu colega pelo sinônimo.

--Time1 cria um sinônimo chamado Time2.

CREATE SYNONYM team2

FOR <oraxx>.DEPARTMENTS;

--Time2 cria um sinônimo chamado Time1.

CREATE SYNONYM team1

FOR <oraxx>. DEPARTMENTS;

Page 27: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

9. Consulte as visões do Dicionário de Dados USER_TABLES e ALL_TABLES. Compare e veja as diferenças. Depois exclua da exibição de ALL_TABLES as tabelas que você é dono.

SELECT table_name

FROM user_tables;

SELECT table_name, owner

FROM all_tables

WHERE owner <>'Oraxx‘;

Page 28: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

10. Revogue o privilégio SELECT do outro time. Depois remova a linha inserida na tabela DEPARTMENTS no exercício 7 e confirme as mudanças.

REVOKE SELECT ON departments FROM <Oraxx>;

DELETE FROM departments WHERE department_id = 500;

COMMIT;

-- OU, para o outro time:

DELETE FROM departments WHERE department_id = 510;

COMMIT;

Page 29: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Consultas Hierárquicas

Page 30: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Após o término do Capítulo:

Interpretar o conceito de uma consulta hierárquica.

Criar um relatório estruturado em árvore.

Formatar dados hierárquicos.

Excluir ramificações de uma estrutura de árvore.

Page 31: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Page 32: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

De Haan

King

Hunold

EMPLOYEE_ID = 100 (Parent)

MANAGER_ID = 100 (Child)

Whalen

Kochhar

Higgins

Mourgos Zlotkey

Rajs Davies Matos

Gietz Ernst Lorentz

Hartstein

Fay

Abel Taylor Grant

Vargas

Page 33: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

WHERE condition:

expr comparison_operator expr

SELECT [LEVEL], column, expr...

FROM table

[WHERE condition(s)]

[START WITH condition(s)]

[CONNECT BY PRIOR condition(s)] ;

Page 34: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

◦ Especifica a condição que deve ser satisfeita.

◦ Aceita qualquer condição válida.

Usando a tabela EMPLOYEES, comece com o empregado cujo sobrenome seja Kochhar.

Ponto de Início

...START WITH last_name = 'Kochhar'

START WITH column1 = value

Page 35: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Percorra a árvore de cima para baixo (top down), usando a tabela EMPLOYEES.

Direções

Top down Column1 = Parent Key Column2 = Child Key

Bottom up Column1 = Child Key Column2 = Parent Key

CONNECT BY PRIOR column1 = column2

... CONNECT BY PRIOR employee_id = manager_id

Page 36: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

SELECT last_name||' reports to '||

PRIOR last_name "Walk Top Down"

FROM employees

START WITH last_name = 'King'

CONNECT BY PRIOR employee_id = manager_id ;

Page 37: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

SELECT employee_id, last_name, job_id, manager_id

FROM employees

START WITH employee_id = 101

CONNECT BY PRIOR manager_id = employee_id ;

Page 38: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Level 1 Raiz/Pai

Level 3 Pai/Filho/Folha

Level 4 Folha

De Haan

King

Hunold Whalen

Kochhar

Higgins

Mourgos Zlotkey

Rajs Davies Matos

Gietz Ernst Lorentz

Hartstein

Fay

Abel Taylor Grant

Vargas

Page 39: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

COLUMN org_chart FORMAT A12

SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_')

AS org_chart

FROM employees

START WITH first_name='Steven' AND last_name='King'

CONNECT BY PRIOR employee_id=manager_id

É possível formatar relatórios hierárquicos utilizando LEVEL e LPAD.

Exemplo: Para mostrar os níveis de gerenciamento da empresa, começando pelo mais alto nível e identando cada um dos níveis:

Page 40: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Para eliminar um nó da árvore, utilize a cláusula WHERE na consulta hierárquica.

Kochhar

Higgins Whalen

Gietz

WHERE last_name != 'Higgins'

Page 41: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Para eliminar uma ramificação da árvore, utilize a cláusula CONNECT BY adicionando um AND na consulta hierárquica.

CONNECT BY PRIOR employee_id = manager_id

AND last_name != 'Higgins'

Gietz

Kochhar

Higgins Whalen

Page 42: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

Objetivos:

◦ Distinguir consultas hierárquicas de consultas não-hierárquicas.

◦ Percorrer uma árvore.

◦ Formatar relatórios com LEVEL e LPAD.

◦ Removendo itens da estratura da árvore.

◦ Ordenando a saída.

Page 43: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

1. Gere um relatório mostrando um modelo organizacional do departamento que o empregado Mourgos trabalha. Mostre os sobrenomes, salários e Ids dos departamentos.

SELECT last_name, salary, department_id

FROM employees

START WITH last_name = 'Mourgos'

CONNECT BY PRIOR employee_id = manager_id;

Page 44: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

2. Gere um relatório mostrando a hierarquia de gerentes do empregado Lorentz. Mostre seu gerente imediato em primeiro lugar.

SELECT last_name

FROM employees

WHERE last_name != 'Lorentz'

START WITH last_name = 'Lorentz'

CONNECT BY PRIOR manager_id = employee_id

Page 45: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

3. Gere um relatório identado mostrando a hierarquia de gerenciamento começando pelo empregado de sobrenome Kochhar. Mostre o sobrenome, ID do gerente e o ID do departamento. Coloque os aliases como no ex.

Page 46: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

3. Solução:

COLUMN name FORMAT A20

SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') name,manager_id mgr, department_id deptno

FROM employees

START WITH last_name = 'Kochhar'

CONNECT BY PRIOR employee_id = manager_id

/

COLUMN name CLEAR

Page 47: DO BÁSICO AO AVANÇADO PARA MANIPULAÇÃO E OTIMIZAÇÃO … · 2012. 6. 20. · COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart

4. Gere um relatório mostrando a hierarquia gerencial. Inicie com a pessoa de maior nível hierárquico. Exclua todas as pessoas com cargo IT_PROG e exclua também o empregado De Haan e os empregados que reportam a ele.

SELECT last_name,employee_id, manager_id

FROM employees

WHERE job_id != 'IT_PROG'

START WITH manager_id IS NULL

CONNECT BY PRIOR employee_id = manager_id

AND last_name != 'De Haan‘