TÓPICO 9 – MANIPULANDO DADOS

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

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”SU5TRVJUIElOVE8gbm9tZV90YWJlbGEgVkFMVUVTIChbdmFsb3Jlc10p” hover_enabled=”0″]SU5TRVJUIElOVE8gbm9tZV90YWJlbGEgVkFMVUVTIChbdmFsb3Jlc10p[/et_pb_dmb_code_snippet]

ou

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”SU5TRVJUIElOVE8gbm9tZV90YWJlbGEgU0VMRUNUIGNvbHVuYXMgRlJPTSB0YWJlbGE=” hover_enabled=”0″]SU5TRVJUIElOVE8gbm9tZV90YWJlbGEgU0VMRUNUIGNvbHVuYXMgRlJPTSB0YWJlbGE=[/et_pb_dmb_code_snippet]

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:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”SU5TRVJUIElOVE8gVEFCX0VNUFJFR0FET1MKICAgVkFMVUVTKDE2LCAnVEVTVEUgREVGQVVMVCcsIDMwMDAuNTAsIFNZU0RBVEUsIE5VTEwsIDExMDAsIDIsIDEsIERFRkFVTFQpOw==” hover_enabled=”0″]SU5TRVJUIElOVE8gVEFCX0VNUFJFR0FET1MKICAgVkFMVUVTKDE2LCAnVEVTVEUgREVGQVVMVCcsIDMwMDAuNTAsIFNZU0RBVEUsIE5VTEwsIDExMDAsIDIsIDEsIERFRkFVTFQpOw==[/et_pb_dmb_code_snippet]

1.2) UPDATE

1.2.1) Conceito

Atualizar dados já existentes em uma tabela

1.2.2) Sintaxe

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”VVBEQVRFIG5vbWVfdGFiZWxhIFNFVCA8Y29sdW5hcz4gW1dIRVJFIGZpbHRyb10=” hover_enabled=”0″]VVBEQVRFIG5vbWVfdGFiZWxhIFNFVCA8Y29sdW5hcz4gW1dIRVJFIGZpbHRyb10=[/et_pb_dmb_code_snippet]

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:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”LS0gbyBleGVtcGxvIGFiYWl4byBpcsOhIGZhbGhhciwgcG9pcyBlbGUgdXNhIHVtIFNFTEVDVCBubyAKLS0gbHVnYXIgZG8gbm9tZSBkYSB0YWJlbGEgcXVlIHNlcsOhIGF0dWFsaXphZGEuCgogVVBEQVRFCiAgIChTRUxFQ1QgRU1QX0lEX0VNUFJFR0FETywgRU1QX05PTUVfRU1QUkVHQURPIEZST00gRU1QUkVHQURPUykKICAgU0VUIEVNUF9TQUxBUklPID0gMTAwMDAKIFdIRVJFIEVNUF9JRF9FTVBSRUdBRE8gPSAoU0VMRUNUIEVNUF9JRF9FTVBSRUdBRE8gRlJPTSBFTVBSRUdBRE9TIFdIRVJFIEVNUF9TRVRPUl9FTVBSRUdBRE8gSVMgTlVMTCk=” hover_enabled=”0″]LS0gbyBleGVtcGxvIGFiYWl4byBpcsOhIGZhbGhhciwgcG9pcyBlbGUgdXNhIHVtIFNFTEVDVCBubyAKLS0gbHVnYXIgZG8gbm9tZSBkYSB0YWJlbGEgcXVlIHNlcsOhIGF0dWFsaXphZGEuCgogVVBEQVRFCiAgIChTRUxFQ1QgRU1QX0lEX0VNUFJFR0FETywgRU1QX05PTUVfRU1QUkVHQURPIEZST00gRU1QUkVHQURPUykKICAgU0VUIEVNUF9TQUxBUklPID0gMTAwMDAKIFdIRVJFIEVNUF9JRF9FTVBSRUdBRE8gPSAoU0VMRUNUIEVNUF9JRF9FTVBSRUdBRE8gRlJPTSBFTVBSRUdBRE9TIFdIRVJFIEVNUF9TRVRPUl9FTVBSRUdBRE8gSVMgTlVMTCk=[/et_pb_dmb_code_snippet]

1.3) DELETE

1.3.1) Conceito

Remover uma ou várias linhas de uma tabela

1.3.2) Sintaxe

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”REVMRVRFIFtGUk9NXSBub21lX3RhYmVsYSBbV0hFUkUgZmlsdHJvXQ==” hover_enabled=”0″]REVMRVRFIFtGUk9NXSBub21lX3RhYmVsYSBbV0hFUkUgZmlsdHJvXQ==[/et_pb_dmb_code_snippet]

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:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”LS0gbyBkZWxldGUgYWJhaXhvIGlyYSBmYWxoYXIKREVMRVRFIEVNUF9JRF9FTVBSRUdBRE8sCiAgICAgICBFTVBfU0VUT1JfRU1QUkVHQURPCiAgRlJPTSBFTVBSRUdBRE9TCiBXSEVSRSBFTVBfSURfRU1QUkVHQURPID49IDEwMDs=” hover_enabled=”0″]LS0gbyBkZWxldGUgYWJhaXhvIGlyYSBmYWxoYXIKREVMRVRFIEVNUF9JRF9FTVBSRUdBRE8sCiAgICAgICBFTVBfU0VUT1JfRU1QUkVHQURPCiAgRlJPTSBFTVBSRUdBRE9TCiBXSEVSRSBFTVBfSURfRU1QUkVHQURPID49IDEwMDs=[/et_pb_dmb_code_snippet]

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

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”TUVSR0UgSU5UTyB0YWJfZGVzdGlubwpVU0lORyB0YWJfb3JpZ2VtCk9OIChjbGF1c3VsYV9jb21wYXJhY2FvIOKAkyBqb2luIGVudHJlIGFzIHRhYmVsYXMpCldIRU4gTUFUQ0hFRCBUSEVOIFVQREFURSBTRVQgPGNvbHVuYXM+CldIRU4gTk9UIE1BVENIRUQgVEhFTiBJTlNFUlQgPGNvbHVuYXMgdGFiZWxhIGRlc3Rpbm8+IFZBTFVFUyA8Y29sdW5hcyB0YWJlbGEgb3JpZ2VtPg==” hover_enabled=”0″]TUVSR0UgSU5UTyB0YWJfZGVzdGlubwpVU0lORyB0YWJfb3JpZ2VtCk9OIChjbGF1c3VsYV9jb21wYXJhY2FvIOKAkyBqb2luIGVudHJlIGFzIHRhYmVsYXMpCldIRU4gTUFUQ0hFRCBUSEVOIFVQREFURSBTRVQgPGNvbHVuYXM+CldIRU4gTk9UIE1BVENIRUQgVEhFTiBJTlNFUlQgPGNvbHVuYXMgdGFiZWxhIGRlc3Rpbm8+IFZBTFVFUyA8Y29sdW5hcyB0YWJlbGEgb3JpZ2VtPg==[/et_pb_dmb_code_snippet]

1.4.3) Exemplo

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”IE1FUkdFIElOVE8gQ0VSVElGSUNBQ0FPLlRBQl9FTVBSRUdBRE9TX0JLUCBCCiAgICAgICAgIFVTSU5HIENFUlRJRklDQUNBTy5UQUJfRU1QUkVHQURPUyBFIAogICAgICAgICAgICBPTiAoQi5JRF9FTVAgPSBFLklEX0VNUCkKICAgICAgICAgICAgV0hFTiBNQVRDSEVEIFRIRU4gCiAgICAgICAgICAgICAgIFVQREFURSBTRVQgQi5OT01FX0VNUCA9ICdVUERBVEUgTUVSR0UnCiAgICAgICAgICAgIFdIRU4gTk9UIE1BVENIRUQgVEhFTiAKICAgICAgICAgICAgICBJTlNFUlQgKEIuSURfRU1QLCAKICAgICAgICAgICAgICAgICAgICAgIEIuTk9NRV9FTVAsIAogICAgICAgICAgICAgICAgICAgICAgQi5TQUxBUklPLCAKICAgICAgICAgICAgICAgICAgICAgIEIuREFUQV9BRE1JU1NBTywgCiAgICAgICAgICAgICAgICAgICAgICBCLklEX0RFUEFSVEFNRU5UTywgCiAgICAgICAgICAgICAgICAgICAgICBCLklEQURFLCAKICAgICAgICAgICAgICAgICAgICAgIEIuQ09NSVNTQU8sIAogICAgICAgICAgICAgICAgICAgICAgQi5JRF9HRVJFTlRFKQogICAgICAgICAgICAgIFZBTFVFUyAoRS5JRF9FTVAsIAogICAgICAgICAgICAgICAgICAgICAgRS5OT01FX0VNUCwgCiAgICAgICAgICAgICAgICAgICAgICBFLlNBTEFSSU8sIAogICAgICAgICAgICAgICAgICAgICAgRS5EQVRBX0FETUlTU0FPLCAKICAgICAgICAgICAgICAgICAgICAgIEUuSURfREVQQVJUQU1FTlRPLCAKICAgICAgICAgICAgICAgICAgICAgIEUuSURBREUsIAogICAgICAgICAgICAgICAgICAgICAgRS5DT01JU1NBTywgCiAgICAgICAgICAgICAgICAgICAgICBFLklEX0dFUkVOVEUp” hover_enabled=”0″]IE1FUkdFIElOVE8gQ0VSVElGSUNBQ0FPLlRBQl9FTVBSRUdBRE9TX0JLUCBCCiAgICAgICAgIFVTSU5HIENFUlRJRklDQUNBTy5UQUJfRU1QUkVHQURPUyBFIAogICAgICAgICAgICBPTiAoQi5JRF9FTVAgPSBFLklEX0VNUCkKICAgICAgICAgICAgV0hFTiBNQVRDSEVEIFRIRU4gCiAgICAgICAgICAgICAgIFVQREFURSBTRVQgQi5OT01FX0VNUCA9ICdVUERBVEUgTUVSR0UnCiAgICAgICAgICAgIFdIRU4gTk9UIE1BVENIRUQgVEhFTiAKICAgICAgICAgICAgICBJTlNFUlQgKEIuSURfRU1QLCAKICAgICAgICAgICAgICAgICAgICAgIEIuTk9NRV9FTVAsIAogICAgICAgICAgICAgICAgICAgICAgQi5TQUxBUklPLCAKICAgICAgICAgICAgICAgICAgICAgIEIuREFUQV9BRE1JU1NBTywgCiAgICAgICAgICAgICAgICAgICAgICBCLklEX0RFUEFSVEFNRU5UTywgCiAgICAgICAgICAgICAgICAgICAgICBCLklEQURFLCAKICAgICAgICAgICAgICAgICAgICAgIEIuQ09NSVNTQU8sIAogICAgICAgICAgICAgICAgICAgICAgQi5JRF9HRVJFTlRFKQogICAgICAgICAgICAgIFZBTFVFUyAoRS5JRF9FTVAsIAogICAgICAgICAgICAgICAgICAgICAgRS5OT01FX0VNUCwgCiAgICAgICAgICAgICAgICAgICAgICBFLlNBTEFSSU8sIAogICAgICAgICAgICAgICAgICAgICAgRS5EQVRBX0FETUlTU0FPLCAKICAgICAgICAgICAgICAgICAgICAgIEUuSURfREVQQVJUQU1FTlRPLCAKICAgICAgICAgICAgICAgICAgICAgIEUuSURBREUsIAogICAgICAgICAgICAgICAgICAgICAgRS5DT01JU1NBTywgCiAgICAgICAgICAgICAgICAgICAgICBFLklEX0dFUkVOVEUp[/et_pb_dmb_code_snippet]

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:

[et_pb_dmb_code_snippet _builder_version=”4.0.6″ code=”LS0gcHJpbWVpcm8gc2F2ZXBvaW50LiBlc3RhZG8gb3JpZ2luYWwgZGEgdGFiZWxhClNBVkVQT0lOVCBBTlRFU19VUERBVEVfMDE7CgotLXVwZGF0ZSAwMQpVUERBVEUgQ0VSVElGSUNBQ0FPLlRBQl9FTVBSRUdBRE9TIAogICBTRVQgTk9NRV9FTVAgPSAnSEFOUyBBUk5PTEQnIAogV0hFUkUgTk9NRV9FTVAgPSAnRElSRVRPUiAwMSc7CgotLXNlZ3VuZG8gc2F2ZXBvaW50LiBhcG9zIHVwZGF0ZSBkZSByZWdpc3RybwpTQVZFUE9JTlQgQU5URVNfSU5TRVJUXzAxOwoKLS1pbnNlcnQgMDEKSU5TRVJUIElOVE8gQ0VSVElGSUNBQ0FPLlRBQl9FTVBSRUdBRE9TIFZBTFVFUyg5OTk4ODgsICdHQUJSSUVMTEUgTElOUycsIDI1MDAwLCBTWVNEQVRFLCA0LCAzNSwgMzAsIDY2OTk2Nik7CgotLXRlcmNlaXJvIHNhdmVwb2ludC4gYXBvcyBpbnNlcnQgZGUgbGluaGEKU0FWRVBPSU5UIEFOVEVTX0RFTEVURV8wMQoKLS1ERUxFVEUgMDEKREVMRVRFIENFUlRJRklDQUNBTy5UQUJfRU1QUkVHQURPUyBXSEVSRSBJRF9FTVAgPSA5OTk4ODgKCi0tQW8gZXhlY3V0YXIgdG9kYSBzZXF1w6puY2lhIGFjaW1hLCBjYXNvIHNlamEgbmVjZXNzw6FyaW8gYXBlbmFzIAotLWRlc2ZhemVyIHVtYSBwYXJ0ZSBkYSB0cmFuc2HDp8OjbywgY29tbyBwb3IgZXhlbXBsbyBtYW50ZXIgbyAKLS1VUERBVEUgMDEsIG1hcyBkZXNmYXplciBvIElOU0VSVCAwMSwgYmFzdGFyaWEgZXUgZXhlY3V0YXIKLS1vIHNlZ3VpbnRlOgoKUk9MTEJBQ0sgVE8gQU5URVNfSU5TRVJUXzAxOw==” hover_enabled=”0″]LS0gcHJpbWVpcm8gc2F2ZXBvaW50LiBlc3RhZG8gb3JpZ2luYWwgZGEgdGFiZWxhClNBVkVQT0lOVCBBTlRFU19VUERBVEVfMDE7CgotLXVwZGF0ZSAwMQpVUERBVEUgQ0VSVElGSUNBQ0FPLlRBQl9FTVBSRUdBRE9TIAogICBTRVQgTk9NRV9FTVAgPSAnSEFOUyBBUk5PTEQnIAogV0hFUkUgTk9NRV9FTVAgPSAnRElSRVRPUiAwMSc7CgotLXNlZ3VuZG8gc2F2ZXBvaW50LiBhcG9zIHVwZGF0ZSBkZSByZWdpc3RybwpTQVZFUE9JTlQgQU5URVNfSU5TRVJUXzAxOwoKLS1pbnNlcnQgMDEKSU5TRVJUIElOVE8gQ0VSVElGSUNBQ0FPLlRBQl9FTVBSRUdBRE9TIFZBTFVFUyg5OTk4ODgsICdHQUJSSUVMTEUgTElOUycsIDI1MDAwLCBTWVNEQVRFLCA0LCAzNSwgMzAsIDY2OTk2Nik7CgotLXRlcmNlaXJvIHNhdmVwb2ludC4gYXBvcyBpbnNlcnQgZGUgbGluaGEKU0FWRVBPSU5UIEFOVEVTX0RFTEVURV8wMQoKLS1ERUxFVEUgMDEKREVMRVRFIENFUlRJRklDQUNBTy5UQUJfRU1QUkVHQURPUyBXSEVSRSBJRF9FTVAgPSA5OTk4ODgKCi0tQW8gZXhlY3V0YXIgdG9kYSBzZXF1w6puY2lhIGFjaW1hLCBjYXNvIHNlamEgbmVjZXNzw6FyaW8gYXBlbmFzIAotLWRlc2ZhemVyIHVtYSBwYXJ0ZSBkYSB0cmFuc2HDp8OjbywgY29tbyBwb3IgZXhlbXBsbyBtYW50ZXIgbyAKLS1VUERBVEUgMDEsIG1hcyBkZXNmYXplciBvIElOU0VSVCAwMSwgYmFzdGFyaWEgZXUgZXhlY3V0YXIKLS1vIHNlZ3VpbnRlOgoKUk9MTEJBQ0sgVE8gQU5URVNfSU5TRVJUXzAxOw==[/et_pb_dmb_code_snippet]

É isso ai pessoal… até a próxima.

Keep Querying