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