Sobre Instruções DML (Data Manipulation Language)

Instruções DML (Data Manipulation Linguagem de manipulação de dados) acessam e manipulam dados em tabelas existentes.

No ambiente do SQL*Plus, você pode digitar uma instrução DML após o prompt SQL>.

No ambiente do SQL Developer, você pode digitar uma instrução DML na planilha. Como alternativa, você pode usar o quadro e ferramentas de Conexões do SQL Developer para acessar e manipular dados.

Para ver o efeito de uma instrução DML no SQL Developer, talvez seja necessário selecionar o tipo de objeto de esquema do objeto alterado no quadro Conexões e, em seguida, clicar no ícone Atualizar.

O efeito de uma instrução DML não é permanente até que você faça commit da transação que a inclui. Uma transação é uma sequência de instruções SQL tratadas pelo Oracle Database como uma unidade (pode ser uma única instrução DML). Até que uma transação sofra commit, ela pode sofrer rollback (ser desfeita). Para obter mais informações sobre transações, consulte "Sobre Instruções de Controle de Transações".

Consulte Também: Referência de Linguagem SQL do Oracle Database para obter mais informações sobre instruções DML

Sobre a Instrução INSERT

A instrução INSERT insere linhas em uma tabela existente.

A forma mais simples recomendada da instrução INSERT tem esta sintaxe:

INSERT INTO table_name (list_of_columns)
VALUES (list_of_values);

Cada coluna em list_of_columns deve ter um valor válido na posição correspondente em list_of_values. Sendo assim, antes de inserir uma linha em uma tabela você deve saber que colunas a tabela possui e quais são seus valores válidos. Para obter essas informações usando o SQL Developer, consulte "Tutorial: Exibindo Propriedades e Dados da Tabela EMPLOYEES com o SQL Developer". Para obter essas informações usando o SQL*Plus, use a instrução DESCRIBE. Por exemplo:

DESCRIBE EMPLOYEES;

Resultado:

Name                                      Null?    Type
----------------------------------------- -------- ------------

EMPLOYEE_ID                               NOT NULL NUMBER(6)
FIRST_NAME                                         VARCHAR2(20)
LAST_NAME                                 NOT NULL VARCHAR2(25)
EMAIL                                     NOT NULL VARCHAR2(25)
PHONE_NUMBER                                       VARCHAR2(20)
HIRE_DATE                                 NOT NULL DATE
JOB_ID                                    NOT NULL VARCHAR2(10)
SALARY                                             NUMBER(8,2)
COMMISSION_PCT                                     NUMBER(2,2)
MANAGER_ID                                         NUMBER(6)
DEPARTMENT_ID                                      NUMBER(4)

A instrução INSERT no Exemplo 3-1 insere uma linha na tabela EMPLOYEES para um funcionário cujo todos os valores de coluna sejam conhecidos.

Você não precisa conhecer todos os valores de coluna para inserir uma linha em uma tabela, mas deve conhecer os valores de todas as colunas NOT NULL. Se você não souber o valor de uma coluna que pode ser NULO, poderá omitir essa coluna de list_of_columns. Seu valor é padronizado como NULL.

A instrução INSERT no Exemplo 3-2 insere uma linha na tabela EMPLOYEES para um funcionário cuja todos os valores de coluna sejam conhecidos, exceto SALARY. Por enquanto, SALARY pode ter o valor NULL. Quando você conhece o salário, pode alterá-lo com a instrução UPDATE (consulte Exemplo 3-4).

A instrução INSERT no Exemplo 3-3 tenta inserir uma linha na tabela EMPLOYEES para um funcionário cuja LAST_NAME não é conhecida.

Exemplo 3-1 Usando a Instrução INSERT Quando Todas as Informações Estiverem Disponíveis

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,
  LAST_NAME,
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,
  SALARY,
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  10,              -- EMPLOYEE_ID
  'George',        -- FIRST_NAME
  'Gordon',        -- LAST_NAME
  'GGORDON',       -- EMAIL
  '650.506.2222',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  9000,            -- SALARY
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

Resultado:

1 row created.

Exemplo 3-2 Usando a Instrução INSERT Quando Nem Todas as Informações Estão Disponíveis

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,
  LAST_NAME,
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,          -- Omit SALARY; its value defaults to NULL.
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  20,              -- EMPLOYEE_ID
  'John',          -- FIRST_NAME
  'Keats',         -- LAST_NAME
  'JKEATS',        -- EMAIL
  '650.506.3333',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

Resultado:

1 row created.

Exemplo 3-3 Usando a Instrução INSERT Incorretamente

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,      -- Omit LAST_NAME (error)
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  20,              -- EMPLOYEE_ID
  'John',          -- FIRST_NAME
  'JOHN',          -- EMAIL
  '650.506.3333',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

Resultado:

ORA-01400: cannot insert NULL into ("HR"."EMPLOYEES"."LAST_NAME")

Consulte também:

Sobre a Instrução UPDATE

A instrução UPDATE atualiza (altera os valores de) um conjunto de linhas da tabela existente.

Uma forma simples da instrução UPDATE tem esta sintaxe:

UPDATE table_name
SET column_name = value [, column_name = value]...
[ WHERE condition ];

Cada valor deve ser válido para seu column_name. Se você incluir a cláusula WHERE, a instrução atualizará os valores das colunas somente em linhas que satisfaçam a condição.

A instrução UPDATE no Exemplo 3-4 atualiza o valor da coluna SALARY na linha que foi inserida na tabela EMPLOYEES no Exemplo 3-2, antes de o salário do funcionário ser conhecido.

A instrução UPDATE no Exemplo 3-5 atualiza a porcentagem de comissão para cada funcionário no departamento 80.

Exemplo 3-4 Usando a Instrução UPDATE para Adicionar Dados

UPDATE EMPLOYEES
SET SALARY = 8500
WHERE LAST_NAME = 'Keats';

Resultado:

1 row updated.

Exemplo 3-5 Usando a Instrução UPDATE para Atualizar Várias Linhas

UPDATE EMPLOYEES
SET COMMISSION_PCT = COMMISSION_PCT + 0.05
WHERE DEPARTMENT_ID = 80;

Resultado:

34 rows updated.

Consulte também:

Sobre a Instrução DELETE

A instrução DELETE exclui linhas de uma tabela.

Uma forma simples da instrução DELETE tem esta sintaxe:

DELETE FROM table_name [ WHERE condition ];

Se você incluir a cláusula WHERE, a instrução excluirá somente as linhas que satisfaçam a condição. Se você omitir a cláusula WHERE, a instrução excluirá todas as linhas da tabela, mas a tabela vazia ainda existirá. Para excluir uma tabela, use a instrução DROP TABLE.

A instrução DELETE no Exemplo 3-6 exclui as linhas inseridas no Exemplo 3-1 e no Exemplo 3-2.

Exemplo 3-6 Usando a Instrução DELETE

DELETE FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('01-JAN-07', 'dd-mon-yy');

Resultado:

2 rows deleted.

Consulte também: