Instrução UPDATE

A instrução UPDATE define o valor na coluna.

Pode ser atualizada a linha corrente de um cursor atualizável aberto. Se não houver linha corrente, ou a linha corrente não satisfizer mais a consulta do cursor, será lançada um exceção.

Sintaxe

{
    UPDATE nome-da-tabela
        SET nome-da-coluna = Valor
        [ , nome-da-coluna = Valor} ]*
        [Cláusula WHERE] |
    UPDATE nome-da-tabela
        SET nome-da-coluna = Valor
        [ , nome-da-coluna = Valor ]*
        WHERE CURRENT OF
}

A primeira forma sintática é chamada de atualização procurada. A segunda forma sintática é chamada de atualização posicionada.

Nas atualizações procuradas, são atualizadas todas as linhas da tabela para as quais a cláusula WHERE é avaliada como TRUE.

Nas atualizações posicionadas, somente podem ser atualizadas as colunas incluídas na Cláusula FOR UPDATE da instrução SELECT que criou o cursor. Se a instrução SELECT não incluir a cláusula FOR UPDATE, o cursor será apenas-de-leitura, não podendo ser utilizado para atualizações.

A especificação de DEFAULT para o valor atualizado, define o valor da coluna como o valor padrão definido nesta tabela.

-- Todos os empregados, exceto o gerente,
-- do departamento (DEP_TRAB) 'E21' foram temporariamente
-- reatribuídos. Indique isto alterando seus cargos (CARGO)
-- para NULL, e os valores de seus pagamentos (SALÁRIO, BÔNUS, COMISS)
-- para zero, na tabela EMPREGADOS.
UPDATE EMPREGADOS
  SET CARGO=NULL, SALÁRIO=0, BÔNUS=0, COMISS=0
  WHERE DEP_TRAB = 'E21' AND CARGO <> 'GERENTE'

-- Promover o cargo (CARGO) de determinado empregado para GERENTE
UPDATE EMPREGADOS
        SET CARGO = 'GERENTE'
        WHERE CURRENT OF CURS1;

-- Multiplicar a equipe do projeto (PROJ_EQUIPE) por 1.5
stmt.executeUpdate("UPDATE PROJETO SET PROJ_EQUIPE = "
"PROJ_EQUIPE * 1.5" +
"WHERE CURRENT OF" + ResultSet.getCursorName());

-- Alterar o cargo (CARGO) do empregado número (NUM_EMP) '000290'
-- na tabela EMPREGADOS para o seu valor DEFAULT que é NULL
UPDATE EMPREGADOS
  SET CARGO = DEFAULT
  WHERE NUM_EMP = '000290';

Sistema de dependência de instrução

A instrução de atualização procurada depende da tabela sendo atualizada, de todos os seus conglomerados (unidades de armazenamento como heaps e índices), todas as suas restrições, e de todas as outras tabelas referenciadas na cláusula WHERE e nas expressões SET. A execução de uma instrução CREATE ou DROP INDEX, ou de uma instrução ALTER TABLE, na tabela de destino de uma instrução de atualização procurada preparada, invalida a instrução de atualização procurada preparada.

A instrução de atualização posicionada depende do cursor e de todas as tabelas que o cursor faz referência. A atualização posicionada pode ser compilada mesmo se o cursor ainda não tiver sido aberto. Entretanto, a remoção do cursor aberto através do método close do JDBC invalida a atualização posicionada.

A execução de uma instrução CREATE ou DROP INDEX, ou de uma instrução ALTER TABLE, na tabela de destino de uma instrução de atualização posicionada preparada, invalida a instrução de atualização posicionada preparada.

A remoção de um aliás invalida a instrução de atualização preparada, se a instrução utilizar o aliás.

Remover ou adicionar gatilhos na tabela de destino da atualização invalida a instrução de atualização.

Conceitos relacionados
Interação com o sistema de dependências
Instruções CREATE
Instruções DROP
Instruções RENAME
Instruções SET
Referências relacionadas
Instrução ALTER TABLE
CALL (PROCEDIMENTO)
Cláusula CONSTRAINT
Instrução DECLARE GLOBAL TEMPORARY TABLE
Instrução DELETE
Cláusula FOR UPDATE
Cláusula FROM
Cláusula GROUP BY
Cláusula HAVING
INNER JOIN
Instrução INSERT
Operação JOIN
LEFT OUTER JOIN
Instrução LOCK TABLE
Cláusula ORDER BY
Consulta
RIGHT OUTER JOIN
SubconsultaEscalar
ExpressãoSeleção
Instrução SELECT
ExpressãoTabela
SubconsultaTabela
VALUES Expressão
Cláusula WHERE
Cláusula WHERE CURRENT OF