Usando Manipulação de Dados

A Oracle fornece comandos de Linguagem de Manipulação de Dados para exercer operações de dados no banco de dados. As operações de dados podem preencher as tabelas do banco de dados com o aplicativo ou dados de negócios, modificando os dados e removendo-os do banco de dados, sempre que necessário. Além das operações de dados, há um conjunto de comandos que são usados ​​para controlar essas operações. Esses comandos são agrupados como Linguagem de Controle de Transações.

Existem três tipos de instruções DML envolvidas em uma transação SQL lógica, a saber, Insert, Update, Delete e Merge. Uma transação é a coleção lógica de ações DML em uma sessão de banco de dados.

Declaração INSERT

O comando INSERT é usado para armazenar dados em tabelas. O comando INSERT é freqüentemente usado em linguagens de programação de nível superior, como Visual Basic.NET ou C ++ como um comando SQL embutido; entretanto, esse comando também pode ser executado no prompt SQL * PLUS no modo de comando. Existem duas formas diferentes do comando INSERT. A primeira forma é usada se uma nova linha tiver um valor inserido em cada coluna da linha. A segunda forma do comando INSERT é usada para inserir linhas onde alguns dos dados da coluna são desconhecidos ou padronizados de outra lógica de negócios. Esta forma do comando INSERT requer que você especifique os nomes das colunas para as quais os dados estão sendo armazenados.

Sintaxe:

A sintaxe a seguir pode ser seguida se os valores de todas as colunas da tabela forem definidos e conhecidos.

INSERT INTO table
VALUES (column1 value, column2 value, 
...);

A sintaxe abaixo pode ser usada se apenas algumas colunas da tabela tiverem que ser preenchidas com um valor. O restante das colunas pode deduzir seus valores como NULL ou a partir de uma lógica de negócios diferente.

INSERT INTO table (column1 name, column2 name, . . .)
VALUES (column1 value, column2 value, . . .);

A instrução INSERT abaixo cria um novo registro de funcionário na tabela EMPLOYEES. Observe que ele insere os valores para as colunas primárias EMPLOYEE_ID, FIRST_NAME, SALARY e DEPARTMENT_ID.

INSERT INTO employees (EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID)
VALUES (130, 'KEMP', 3800, 10);

Caso contrário, os dados completos do funcionário podem ser inseridos na tabela EMPLOYEES sem especificar a lista de colunas usando a instrução INSERT abaixo - desde que os valores sejam conhecidos de antemão e devam estar em conformidade com o tipo de dados e a posição das colunas na tabela.

INSERT INTO employees
VALUES (130, 'KEMP','GARNER', '[email protected]', '48309290',TO_DATE ('01-JAN-2012'), 'SALES', 3800, 0, 110, 10);

Os valores a serem inseridos devem ser compatíveis com o tipo de dados da coluna. Literais, valores fixos e valores especiais como funções, SYSDATE, CURRENT_DATE, SEQ.CURRVAL (NEXTVAL) ou USER podem ser usados ​​como valores de coluna. Os valores especificados devem seguir as regras genéricas. Literais de string e valores de data devem ser colocados entre aspas. O valor da data pode ser fornecido no formato DD-MON-RR ou D-MON-YYYY, mas YYYY é o preferido, pois especifica claramente o século e não depende da lógica de cálculo do século RR interno.

Instrução INSERT-AS-SELECT (IAS)

Os dados podem ser preenchidos na tabela de destino da tabela de origem usando a operação INSERT..AS..SELECT (IAS). É uma operação de leitura de caminho direto. É uma maneira simples de criar uma cópia dos dados de uma tabela para outra ou criar uma cópia de backup da tabela em que as operações da tabela de origem estão online.

Por exemplo, os dados podem ser copiados da tabela EMPLOYEES para a tabela EMP_HISTORY.

INSERT INTO EMP_HISTORY
SELECT EMPLOYEE_ID, EMPLOYEE_NAME, SALARY, DEPARTMENT_ID
FROM employees;

Declaração UPDATE

O comando UPDATE modifica os dados armazenados em uma coluna. Ele pode atualizar uma ou várias linhas de uma vez, dependendo do conjunto de resultados filtrado pelas condições especificadas na cláusula WHERE. Observe que Atualizar colunas é diferente de alterar colunas. No início deste capítulo, você estudou o comando ALTER. O comando ALTER altera a estrutura da tabela, mas não afeta os dados da tabela. O comando UPDATE altera os dados da tabela, não a estrutura da tabela.

Sintaxe:

UPDATE table
SET column = value [, column = value ...]
[WHERE condition]

Da sintaxe,

A expressão SET coluna = pode ser qualquer combinação de caracteres, fórmulas ou funções que irão atualizar os dados no nome da coluna especificada. A cláusula WHERE é opcional, mas se for incluída, especifica quais linhas serão atualizadas. Apenas uma tabela pode ser atualizado com um comando UPDATE.

A declaração UPDATE abaixo atualiza o salário do funcionário JOHN para 5000.

UPDATE employees
SET salary = 5000
WHERE UPPER (first_name) = 'JOHN';

Embora os predicados WHERE sejam opcionais, devem ser anexados logicamente de modo a modificar apenas a linha necessária na tabela. A instrução UPDATE abaixo atualiza os salários de todos os funcionários da tabela.

UPDATE employees
SET salary = 5000;

Várias colunas também podem ser atualizadas especificando-se várias colunas na cláusula SET separadas por uma vírgula. Por exemplo, se o salário e o cargo tiverem que ser alterados para 5000 e SALES respectivamente para JOHN, a instrução UPDATE será semelhante a

UPDATE employees
SET	SALARY = 5000,
	JOB_ID = 'SALES'
WHERE UPPER (first_name) = 'JOHN';

1 row updated.

Outra maneira de atualizar várias colunas da mesma linha mostra o uso de subconsulta.

UPDATE employees
SET (SALARY, JOB_ID) = (SELECT 5000, 'SALES' FROM DUAL)
WHERE UPPER (ENAME) = 'JOHN'

Declaração DELETE

O comando DELETE é uma das instruções SQL mais simples. Ele remove uma ou mais linhas de uma tabela. Várias operações de exclusão de tabela não são permitidas em SQL. A sintaxe do comando DELETE é a seguinte.

DELETE FROM table_name
    [WHERE condition];

O comando DELETE exclui todas as linhas da tabela que satisfazem a condição da cláusula WHERE opcional. Como a cláusula WHERE é opcional, é possível excluir facilmente todas as linhas de uma tabela omitindo uma cláusula WHERE, pois a cláusula WHERE limita o escopo da operação DELETE.

A instrução DELETE abaixo removeria os detalhes do EDWIN da tabela EMP.

DELETE employees
WHERE UPPER (ENAME) = 'EDWIN'

1 row deleted.

Nota: DELETE [TABLE NAME] e DELETE FROM [TABLE NAME] têm o mesmo significado.

A condição WHERE nas instruções de exclusão condicional pode fazer uso de subconsulta conforme mostrado abaixo.

DELETE FROM employees
WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID
				    FROM LOCATIONS
				    WHERE LOCATION_CODE = 'SFO')

TRUNCAR

Truncar é um comando DDL usado para limpar todos os registros de uma tabela, mas mantendo a estrutura da tabela. Não suporta a condição WHERE para remover os registros selecionados.

Sintaxe:

TRUNCATE [table name]

É Auto Commit, ou seja, ele confirma a transação ativa atual na sessão. Truncar a tabela não elimina índices dependentes, gatilhos ou restrições de tabela. Se uma tabela A for pai de uma restrição de referência de uma tabela B no banco de dados, a tabela A não poderá ser truncada.

Transação

Uma transação é uma unidade lógica de trabalho realizada no banco de dados. Ele pode conter -

  • Vários comandos DML terminando com um comando TCL, ou seja, COMMIT ou ROLLBACK

  • Um comando DDL

  • Um comando DCL

O início de uma transação é marcado com o primeiro comando DML. Termina com um comando TCL, DDL ou DCL. Um comando TCL, ou seja, COMMIT ou ROLLBACK, é emitido explicitamente para encerrar uma transação ativa. Em virtude de seu comportamento básico, se algum dos comandos DDL ou DCL for executado em uma sessão de banco de dados, confirme a transação ativa em andamento na sessão. Se a instância do banco de dados travar de forma anormal, a transação será interrompida.

COMMIT, ROLLBACK e SAVEPOINT são a linguagem de controle de transação. COMMIT aplica as alterações de dados permanentemente no banco de dados enquanto ROLLBACK executa a operação anti-commit. SAVEPOINT controla a série de uma transação, definindo marcadores em diferentes estágios da transação. O usuário pode reverter a transação atual para o ponto de salvamento desejado, que foi definido anteriormente.

COMMIT- Commit termina a transação ativa atual aplicando as alterações de dados permanentemente nas tabelas do banco de dados. COMMIT é um comando TCL que termina explicitamente a transação. No entanto, os comandos DDL e DCL confirmam implicitamente a transação.

SAVEPOINT- Savepoint é usado para marcar um ponto específico na transação atual na sessão. Por ser um marcador lógico na transação, os pontos de salvamento não podem ser consultados nos dicionários de dados.

ROLLBACK- O comando ROLLBACK é usado para encerrar a transação inteira descartando as alterações de dados. Se a transação contiver pontos de salvamento marcados, ROLLBACK TO SAVEPOINT [nome] pode ser usado para reverter a transação até o ponto de salvamento especificado apenas. Como resultado, todas as alterações de dados até o ponto de salvamento especificado serão descartadas.

Demonstração

Considere a tabela EMPLOYEES, que é preenchida com detalhes de funcionários recém-contratados durante o primeiro trimestre de cada ano. A equipe administrativa anexa cada detalhe do funcionário com um ponto de salvamento, de modo a reverter quaisquer dados defeituosos a qualquer momento durante a atividade de alimentação de dados. Observe que ele mantém os nomes dos pontos de salvamento iguais aos nomes dos funcionários.

INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (105, 'Allen',TO_DATE ('15-JAN-2013','SALES',10000,10);

SAVEPOINT Allen;

INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (106, 'Kate',TO_DATE ('15-JAN-2013','PROD',10000,20);

SAVEPOINT Kate;

INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (107, 'McMan',TO_DATE ('15-JAN-2013','ADMIN',12000,30);

SAVEPOINT McMan;

Suponha que o operador de alimentação de dados perceba que inseriu incorretamente o salário de 'Kate' e 'McMan'. Ele reverte a transação ativa para o ponto de salvamento Kate e insere novamente os detalhes do funcionário para Kate e McMan.

ROLLBACK TO SAVEPOINT Kate;

INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (106, 'Kate',TO_DATE ('15-JAN-2013','PROD',12500,20);

SAVEPOINT Kate;

INSERT INTO employees (employee_id, first_name, hire_date, job_id, salary, department_id)
VALUES (107, 'McMan',TO_DATE ('15-JAN-2013','ADMIN',13200,30);

SAVEPOINT McMan;

Uma vez que ele tenha concluído a entrada de dados, ele pode comprometer a transação inteira emitindo COMMIT na sessão atual.

Consistência de leitura

A Oracle mantém a consistência entre os usuários em cada sessão em termos de acesso a dados e ações de leitura / gravação.

Quando um DML ocorre em uma tabela, os valores dos dados originais alterados pela ação são registrados nos registros de desfazer do banco de dados. Desde que a transação não seja confirmada no banco de dados, qualquer usuário em outra sessão que posteriormente consultar os dados modificados visualiza os valores dos dados originais. O Oracle usa informações atuais na área global do sistema e informações nos registros de desfazer para construir uma visão consistente de leitura dos dados de uma tabela para uma consulta. Somente quando uma transação é confirmada, as alterações da transação tornam-se permanentes. A transação é a chave da estratégia da Oracle para fornecer consistência de leitura.

O ponto de partida para visualizações consistentes de leitura é gerado em nome dos leitores

Controla quando os dados modificados podem ser vistos por outras transações do banco de dados para leitura ou atualização