[Oracle] 1Z0-051: Tópico 9 – Manipulando dados | Certificação BD 4shared
Postado por fabriciopj | nov 9, 2012 | 1Z0-051 | 0 |
Subtópico 9.1 – Describe each data manipulation language (DML) statement
Subtópico 9.2 – Insert rows into a table
Subtópico 9.3 – Update rows in a table
Subtópico 9.4 – Delete rows from a table
Subtópico 9.5 – Control transactions
Neste novo post, abordarei assuntos relacionados a manipulação de dados, também conhecido como DML (Data Manipulation Language). Também falarei um pouco sobre o controle de transações.
1) Operações DML
São operações que alteram de alguma forma uma, ou várias tabelas do banco de dados. Essas alterações se restringem ao escopo dos registros apenas. Alterações estruturais das tabelas são chamadas de DDL (Data Definition Language), e não serão abordadas neste post.
Os tipos de DML são:
1.1) INSERT
1.1.1) Conceito
Inserir dados em uma tabela.
1.1.2) Sintaxe
INSERT INTO nome_tabela VALUES ([valores])
INSERT INTO nome_tabela SELECT colunas FROM tabela
1.1.3) Dicas
* No INSERT, os valores a serem inseridos serão comparados com os tipos de dados das colunas, para ver se eles são compativeis e se uma conversão implicita é possível.
* A palavra-chave DEFAULT pode ser usada em UPDATEs e INSERTs para usar o valor default determinado em uma coluna. Ex:
INSERT INTO TAB_EMPREGADOS
VALUES(16, 'TESTE DEFAULT', 3000.50, SYSDATE, NULL, 1100, 2, 1, DEFAULT);
1.2) UPDATE
1.2.1) Conceito
Atualizar dados já existentes em uma tabela
1.2.2) Sintaxe
UPDATE nome_tabela SET <colunas> [WHERE filtro]
OBS1: O WHERE não é obrigatório, mas caso seja omitido, todas as linhas da tabela serão atualizadas.
1.2.3) Dicas
* No UPDATE, pode-se usar expressões nos campos a serem atualizados. Expressões incluem literais, colunas, equações matemáticas e funções SQL.
* Em um UPDATE, não é possível ter uma clausula SELECT no lugar do nome da tabela (Inline View). Ex:
-- o exemplo abaixo irá falhar, pois ele usa um SELECT no
-- lugar do nome da tabela que será atualizada.
(SELECT EMP_ID_EMPREGADO, EMP_NOME_EMPREGADO FROM EMPREGADOS)
SET EMP_SALARIO = 10000
WHERE EMP_ID_EMPREGADO = (SELECT EMP_ID_EMPREGADO FROM EMPREGADOS WHERE EMP_SETOR_EMPREGADO IS NULL)
1.3) DELETE
1.3.1) Conceito
Remover uma ou várias linhas de uma tabela
1.3.2) Sintaxe
DELETE [FROM] nome_tabela [WHERE filtro]
1.3.3) Dicas
* No DELETE, é possível omitir a palavra-chave FROM.
* O WHERE não é obrigatório, mas caso omitido, irá remover todas as linhas da tabela.
* No DELETE, não é possível remover determinada coluna de uma linha. O comando DELETE remove uma linha inteira da tabela. Ex:
-- o delete abaixo ira falhar
1.4) MERGE
1.4.1) Conceito
Update/Insert condicional, onde caso uma condição seja verdadeira, um UPDATE é realizado, senão um INSERT é realizado.
1.4.2) Sintaxe
MERGE INTO tab_destino
USING tab_origem
ON (clausula_comparacao – join entre as tabelas)
WHEN MATCHED THEN UPDATE SET <colunas>
WHEN NOT MATCHED THEN INSERT <colunas tabela destino> VALUES <colunas tabela origem>
1.4.3) Exemplo
MERGE INTO CERTIFICACAO.TAB_EMPREGADOS_BKP B
USING CERTIFICACAO.TAB_EMPREGADOS E
ON (B.ID_EMP = E.ID_EMP)
UPDATE SET B.NOME_EMP = 'UPDATE MERGE'
INSERT (B.ID_EMP,
B.NOME_EMP,
B.DATA_ADMISSAO,
B.ID_DEPARTAMENTO,
B.IDADE,
B.COMISSAO,
B.ID_GERENTE)
VALUES (E.ID_EMP,
E.DATA_ADMISSAO,
E.IDADE,
E.COMISSAO,
E.ID_GERENTE)
2) CONTROLE TRANSACIONAL
Quando se executa uma operação DML, esta só será realmente efetivada no banco de dados, ou desfeita, após a execução de um COMMIT ou ROLLBACK, respectivamente. Quando se executa um INSERT, por exemplo, os dados inseridos estão disponiveis apenas para a sessão que executou o INSERT. Todas as outras sessões não podem ver tal insert. Este apenas estará disponível após a execução de um COMMIT.
Uma transação só é finalizada quando um COMMIT (implicito ou explícito) ou um ROLLBACK (implicito ou explícito) são executados.
Existem 2 tipos de commits:
* Commit Explicitos: Ocorre quando o comando COMMIT é executado.
OBS1: O comando COMMIT WORK (padrão ANSI SQL) é o mesmo que o comando COMMIT (padrão Oracle SQL).
* Commit Implicito: Ocorre automaticamente quando certos eventos na base de dados ocorrem. Esses eventos são:
1 – Imediatamente antes ou após a execução de qualquer comando DDL(CREATE, ALTER, DROP, GRANT ou REVOKE). Caso algum comando DDL falhe antes de ser concluído, qualquer transação pendente será "commitada". Caso ocorra um erro de sintaxe com algum comando DDL, o COMMIT não é executado.
2 – Saír normalmente de alguma ferramenta ORACLE, como o SQL*Plus ou SQL Developer.
O ROLLBACK é o oposto do COMMIT, desfazendo as alterações realizadas. Quando se executa um DELETE, por exemplo, removendo uma linha de determinada tabela, esta emsma linha ainda existirá nos segmentos de UNDO. Caso o usuário que executou o DELETE, execute o comando ROLLBACK, a linha removida será reconstruída a partir dos segmentos de UNDO até o estado inicial da transação. Estes segmentos ficam armazenados na tablespace de UNDO.
Um ROLLBACK implicito ocorre quando um programa termina de forma anormal.
SAVEPOINTs são marcadores dentro de uma transação que permitem a execução de ROLLBACKs parciais. Sua sintaxe é: ROLLBACK TO nome_savepoint.
Seu conceito é melhor explicado através de um exemplo:
-- primeiro savepoint. estado original da tabela
SAVEPOINT ANTES_UPDATE_01;
--update 01
UPDATE CERTIFICACAO.TAB_EMPREGADOS
SET NOME_EMP = 'HANS ARNOLD'
WHERE NOME_EMP = 'DIRETOR 01';
--segundo savepoint. apos update de registro
SAVEPOINT ANTES_INSERT_01;
--insert 01
INSERT INTO CERTIFICACAO.TAB_EMPREGADOS VALUES(999888, 'GABRIELLE LINS', 25000, SYSDATE, 4, 35, 30, 669966);