ACTUALIZAR
Propósito
Usar la instrucción UPDATE
para cambiar los valores existentes en una tabla o en la tabla base de una vista o la tabla maestra de una vista materializada.
Temas adicionales
-
Requisitos previos
-
Sintaxis
-
Semántica
-
Ejemplos
Requisitos previos
Para para actualizar valores en una tabla, la tabla debe estar en su propio esquema o debe tener el privilegio de objeto UPDATE
en la tabla.
Para que actualice valores en la tabla base de una vista:
-
Debe tener el privilegio de objeto
UPDATE
en la vista, y -
Quien sea el propietario del esquema que contiene la vista debe tener el privilegio de objeto
UPDATE
en la tabla base.
El privilegio del sistema UPDATE
ANY
TABLE
también le permite actualizar valores en cualquier mesa o en la mesa base de cualquier vista.
También debe tener el privilegio de objeto SELECT
sobre el objeto que desea actualizar si:
-
El objeto está en una base de datos remota o
-
El parámetro de inicialización
SQL92_SECURITY
se establece enTRUE
y la operaciónUPDATE
hace referencia a columnas de la tabla, como las columnas en unwhere_clause
.
Sintaxis
update :: =
Descripción de la ilustración update.gif
(DML_table_expression_clause :: =, update_set_clause :: =, where_clause :: =, return_clause :: =, error_logging_clause :: =)
DML_table_expression_clause :: =
Descripción de la ilustración DML_table_expression_clause.gif
(subconsulta :: = – parte de SELECT, subquery_restriction_clause :: =, table_collection_expression :: =)
subquery_restriction_clause :: =
Descripción de la ilustración subquery_restriction_clause.gif
table_collection_expression :: =
Descripción de la ilustración table_collection_expression.gif
update_set_clause :: =
Descripción de la ilustración update_set_clause. gif
where_clause :: =
Descripción de la ilustración where_clause.gif
return_clause :: =
Descripción de la ilustración return_clause.gif
error_logging_clause :: =
Descripción de la ilustración error_logging_clause.gif
Semántica
pista
Especifique un comentario que pasa instrucciones al optimizador sobre la elección de un plan de ejecución para la declaración.
Puede colocar una sugerencia paralela inmediatamente después de la palabra clave UPDATE
para paralelizar tanto el bajo escaneo mentiroso y UPDATE
operaciones.
Consulte también:
-
Guía de ajuste del rendimiento de la base de datos Oracle y » Uso de sugerencias «para la sintaxis y descripción de las sugerencias
-
Guía de ajuste del rendimiento de la base de datos Oracle y Conceptos de la base de datos Oracle para obtener información detallada sobre DML en paralelo
DML_table_expression_clause
La cláusula ONLY
se aplica solo a las vistas. Especifique la sintaxis ONLY
si la vista en la cláusula UPDATE
es una vista que pertenece a una jerarquía y no desea actualizar filas de ninguna de sus subvistas.
Consulte también:
«Restricciones en la DML_table_expression_clause» y «Actualización de una tabla: ejemplos»
esquema
Especifique el esquema que contiene el objeto a actualizar. Si omite schema
, entonces la base de datos asume que el objeto está en su propio esquema.
tabla | ver | vista_materializada | subconsulta
Especifique el nombre de la tabla, vista, vista materializada o las columnas devueltas por una subconsulta para actualizar. Al emitir una instrucción UPDATE
contra una tabla, se activan los UPDATE
asociados con la tabla.
-
Si especifica
view
, la base de datos actualiza la tabla base de la vista.No puede actualizar una vista excepto conINSTEAD
OF
activadores si la consulta de definición de la vista contiene una de las siguientes construcciones:
Un operador de conjunto Un operadorDISTINCT
Una función agregada o analítica AGROUP
BY
,ORDER
BY
,MODEL
,CONNECT
BY
, oSTART
WITH
cláusula Una expresión de colección en unaSELECT
lista Una subconsulta en unaSELECT
lista Una subconsulta designadaWITH READ ONLY
Uniones, con algunas excepciones , como se documenta en la Guía del administrador de la base de datos Oracle
-
No puede actualizar más de una tabla base a través de una vista.
-
Además, si el La vista se creó con
WITH
CHECK
, puede actualizar la vista solo si los datos resultantes satisfacen la consulta de definición de la vista. -
Si
table
o la tabla base deview
contiene una o más columnas de índice de dominio, entonces esta declaración ejecuta la rutina de actualización del tipo de índice correspondiente. -
No puede actualizar filas en una vista materializada de solo lectura. Si actualiza filas en una vista materializada de escritura, la base de datos actualiza las filas de la tabla contenedora subyacente. Sin embargo, las actualizaciones se sobrescriben en la siguiente operación de actualización. Si actualiza filas en una vista materializada actualizable que es parte de un grupo de vistas materializadas, la base de datos también actualiza las filas correspondientes en la tabla maestra.
Consulte Además:
-
Guía del desarrollador de Oracle Data Cartridge para obtener más información sobre las rutinas de actualización del tipo de índice
-
CREAR VISTA MATERIALIZADA para obtener información sobre creando vistas materializadas actualizables
PARTICIÓN | SUBPARTICIÓN
Especifique el nombre de la partición o subpartición dentro de table
destinado a las actualizaciones. No es necesario especificar el nombre de la partición al actualizar los valores en una tabla particionada. Sin embargo, en algunos casos, especificar el nombre de la partición puede ser más eficaz que un complicado where_clause
.
Vea también:
«Referencia a tablas e índices particionados» y «Actualización de una partición: ejemplo»
dblink
Especifique un nombre completo o parcial de un enlace de base de datos a una base de datos remota donde t Se localiza el objeto. Puede usar un enlace de base de datos para actualizar un objeto remoto solo si está usando la funcionalidad distribuida de Oracle Database.
Si omite dblink,
, entonces la base de datos asume que el objeto es en la base de datos local.
Consulte también:
«Cómo hacer referencia a objetos en bases de datos remotas» para obtener información sobre cómo hacer referencia a enlaces de bases de datos
subquery_restriction_clause
Utilice subquery_restriction_clause
para restringir la subconsulta de una de las siguientes formas:
CON LECTURA SOLAMENTE Especifique WITH READ ONLY
para indicar que la tabla o vista no se puede actualizar.
CON OPCIÓN DE COMPROBACIÓN Especifique WITH CHECK OPTION
para indicar que Oracle Database prohíbe cualquier cambio en la tabla o vista que produciría filas que no están incluidas en la subconsulta. Cuando se usa en la subconsulta de una declaración DML, puede especificar esta cláusula en una subconsulta en la cláusula FROM
pero no en la subconsulta en la WHERE
cláusula.
Restricción CONSTRAINT Especifique el nombre de la restricción CHECK OPTION
. Si omite este identificador, Oracle asigna automáticamente a la restricción un nombre de la forma SYS_C
n
, donde n es un número entero que hace que el nombre de restricción único dentro de la base de datos.
Consulte también:
«Uso de la cláusula WITH CHECK OPTION: Ejemplo»
table_collection_expression
El table_collection_expression
le permite informar a Oracle que el valor de collection_expression
debe tratarse como una tabla para fines de consultas y operaciones DML. collection_expression
puede ser una subconsulta, una columna, una función o un constructor de colección. Independientemente de su forma, debe devolver un valor de colección, es decir, un valor cuyo tipo sea tabla anidada o varray. Este proceso de extraer los elementos de una colección se denomina desanidación de la colección.
El signo más (+) opcional es relevante si está uniendo la expresión TABLE
con el padre mesa. El + crea una combinación externa de los dos, de modo que la consulta devuelve filas de la tabla externa incluso si la expresión de la colección es nula.
Nota:
En versiones anteriores de Oracle, cuando collection_expression
era una subconsulta, table_collection_expression
se expresaba como THE
subquery
.Ese uso ahora está desaprobado.
Puede usar un table_collection_expression
para actualizar filas en una tabla según las filas de otra tabla. Por ejemplo, puede acumular cuatro tablas de ventas trimestrales en una tabla de ventas anual.
t_alias
Especifique un nombre de correlación (alias) para la tabla, vista o subconsulta a la que se hará referencia en otra parte de la declaración. Este alias es obligatorio si DML_table_expression_clause
hace referencia a cualquier atributo de tipo de objeto o método de tipo de objeto.
Consulte también:
«Actualización correlacionada: ejemplo «
Restricciones sobre DML_table_expression_clause Esta cláusula está sujeta a las siguientes restricciones:
-
No puede ejecutar esta declaración si
table
o la tabla base deview
contiene cualquier índice de dominio marcado comoIN_PROGRESS
oFAILED
. -
No puede insertar en una partición si alguna de las particiones de índice afectadas están marcadas como
UNUSABLE
. -
No puede especificar
order_by_clause
en la subconsulta deDML_table_expression_clause
. -
Si especifica un índice, una partición de índice o una subpartición de índice que se ha marcado
UNUSABLE
, la instrucciónUPDATE
fallará a menos que laSKIP_UNUSABLE_INDEXES
parámetro de sesión se ha establecido enTRUE
.
Consulte también:
ALTER SESSION para obtener información sobre SKIP_UNUSABLE_INDEXES
parámetro de sesión
update_set_clause
El update_set_clause
le permite establecer valores de columna.
columna
Especifique el nombre de una columna del objeto que se va a actualizar. Si omite una columna de la tabla de update_set_clause
, el valor de esa columna permanece sin cambios.
Si column
se refiere a un atributo de objeto LOB, luego primero debe inicializarlo con un valor de vacío o nulo. No puede actualizarlo con un literal. Además, si está actualizando un valor LOB utilizando algún método que no sea una instrucción SQL UPDATE
directa, primero debe bloquear la fila que contiene el LOB. Consulte for_update_clause para obtener más información.
Si column
es parte de la clave de partición de una tabla particionada, entonces UPDATE
fallará si cambia un valor en la columna que movería la fila a una partición o subpartición diferente, a menos que habilite el movimiento de filas. Consulte el row_movement_clause
de CREATE TABLE o ALTER TABLE.
Además, si column
es parte del clave de partición de una tabla particionada por lista, entonces UPDATE
fallará si especifica un valor para la columna que no existe ya en el partition_value
lista de una de las particiones.
subconsulta
Especifique una subconsulta que devuelva exactamente una fila por cada fila actualizada.
-
Si especifique solo una columna en
update_set_clause
, entonces la subconsulta puede devolver solo un valor. -
Si especifica varias columnas en el
update_set_clause
, entonces la subconsulta debe devolver tantos valores como columnas especificadas. -
Si la subconsulta no devuelve filas, entonces el se asigna un valor nulo a la columna.
-
Si esta
subquery
se refiere a objetos remotos, entoncesUPDATE
la operación puede ejecutarse en paralelo siempre que la referencia ce no vuelve a un objeto en la base de datos local. Sin embargo, sisubquery
enDML_table_expression_clause
se refiere a cualquier objeto remoto, entoncesUPDATE
la operación se ejecutará en serie sin notificación.
Puede usar flashback_query_clause
dentro de la subconsulta para actualizar table
con datos anteriores. Consulte la cláusula flashback_query_clause de SELECT
para obtener más información sobre esta cláusula.
Consulte también:
-
SELECT y «Uso de subconsultas»
-
Parallel_clause en la documentación CREATE TABLE
expr
Especifique una expresión que resuelva el nuevo valor asignado a la columna correspondiente.
Consulte también:
Capítulo 6, «Expresiones» para la sintaxis de expr
y «Actualización de una tabla de objetos: ejemplo»
DEFAULT Especifique DEFAULT
para establecer la columna en el valor especificado previamente como predeterminado valor de la columna. Si no se ha especificado ningún valor predeterminado para la columna correspondiente, la base de datos establece la columna en nula.
Restricción para actualizar los valores predeterminados No puede especificar DEFAULT
si está actualizando una vista.
Cláusula VALUE
La cláusula VALUE
le permite especificar la fila completa de una tabla de objetos.
Restricción en la cláusula VALUE Puede especificar esta cláusula solo para una tabla de objetos.
Nota:
Si inserta cadenas literales en una RAW
columna, durante las consultas posteriores, Oracle Database realizará un análisis completo de la tabla en lugar de usar cualquier índice que pueda existir en la columna RAW
.
Consulte también:
«Actualización de una tabla de objetos: ejemplo»
where_clause
La where_clause
le permite restringir las filas actualizadas a aquellas para las que el condition
es cierto. Si omite esta cláusula, la base de datos actualiza todas las filas de la tabla o vista. Consulte el Capítulo 7, «Condiciones» para conocer la sintaxis de condition
.
El where_clause
determina las filas en qué valores se actualizan. Si no especifica where_clause
, se actualizan todas las filas. Para cada fila que cumple con where_clause
, las columnas a la izquierda del operador de igualdad (=) en update_set_clause
se establecen en los valores de las expresiones correspondientes a la derecha del operador. Las expresiones se evalúan a medida que se actualiza la fila.
return_clause
La cláusula return recupera las filas afectadas por una declaración DML. Puede especificar esta cláusula para tablas y vistas materializadas y para vistas con una sola tabla base.
Cuando se opera en una sola fila, una declaración DML con un returning_clause
puede recuperar expresiones de columna usando la fila afectada, el identificador de fila y REFs
en la fila afectada y almacenarlas en variables del lenguaje principal o variables PL / SQL.
Al operar en varias filas, una declaración DML con returning_clause
almacena valores de expresiones, filas y REFs
que involucran las filas afectadas en matrices de enlace.
expr Cada elemento de la lista expr
debe tener una sintaxis de expresión válida.
EN EL INTO
indica que los valores de las filas modificadas se almacenarán en las variables especificadas en la lista data_item
.
data_item Cada data_item
es una variable del lenguaje principal o PL / SQL que almacena el valor expr
recuperado.
Para cada expresión de la lista RETURNING
, debe especificar una variable de lenguaje principal o PL / SQL compatible con el tipo correspondiente en el INTO
lista.
Restricciones Las siguientes restricciones se aplican a la RETURNING
cláusula:
-
La
expr
está restringido de la siguiente manera:-
Para
UPDATE
yDELETE
declaraciones cadaexpr
debe ser una expresión simple o una expresión de función agregada de un solo conjunto. No puede combinar expresiones simples y expresiones de función agregada de un solo conjunto en el mismoreturning_clause
. ParaINSERT
declaraciones, cadaexpr
debe ser una expresión simple. Las funciones agregadas no se admiten en unaINSERT
declaraciónRETURNING
cláusula. -
Single- establecer expresiones de función agregada no puede incluir la
DISTINCT
palabra clave.
-
-
Si el contiene una columna de clave principal u otra columna
NOT
NULL
, entonces la declaración de actualización falla si la tabla tiene unBEFORE
UPDATE
definido en él. -
No puede especificar el
returning_clause
para una inserción de varias tablas. -
No puede usar esta cláusula con DML paralelo o con objetos remotos.
-
No puede recuperar
LONG
tipos con esta cláusula. -
No puede especificar esta cláusula para una vista en la que se ha definido un
INSTEAD
OF
activador.
Consulte también :
Usuario PL / SQL » s Guía y referencia para obtener información sobre el uso de la cláusula BULK
COLLECT
para devolver varios valores a las variables de colección
error_logging_clause
El error_logging_clause tiene el mismo comportamiento en una instrucción UPDATE
que en una instrucción INSERT
. Consulte la INSERT
declaración error_logging_clause para obtener más información.
Vea también:
«Inserción en una tabla con registro de errores: ejemplo»
Ejemplos
Actualización de una tabla: ejemplos Lo siguiente La declaración otorga comisiones nulas a todos los empleados con el trabajo SH_CLERK
:
UPDATE employees SET commission_pct = NULL WHERE job_id = "SH_CLERK";
La siguiente declaración promueve a Douglas Grant a gerente del Departamento 20 con un aumento de $ 1,000:
UPDATE employees SET job_id = "SA_MAN", salary = salary + 1000, department_id = 120 WHERE first_name||" "||last_name = "Douglas Grant";
La siguiente declaración aumenta el salario de un empleado en el employees
tabla en la remote
base de datos:
UPDATE employees@remote SET salary = salary*1.1 WHERE last_name = "Baer";
El siguiente ejemplo muestra las siguientes construcciones sintácticas de UPDATE
declaración:
-
Ambas formas de
update_set_clause
juntas en una sola declaración -
Una subconsulta correlacionada
-
Una
where_clause
para limitar las filas actualizadas
La sentencia UPDATE
anterior realiza las siguientes operaciones:
-
Actualiza solo a los empleados que trabajan en Ginebra o Múnich (ubicaciones 2900 y 2700)
-
Conjuntos
department_id
para estos empleados adepartment_id
correspondiente a Bombay (location_id
2100) -
Establece el salario de cada empleado en 1,1 veces el salario promedio de su departamento
-
Establece la comisión de cada empleado en 1,5 veces la comisión promedio de su departamento
Actualización de una partición: ejemplo El siguiente ejemplo actualiza los valores en una sola partición de la sales
tabla:
UPDATE sales PARTITION (sales_q1_1999) s SET s.promo_id = 494 WHERE amount_sold > 1000;
Actualización de una tabla de objetos: ejemplo La siguiente declaración crea dos tablas de objetos, people_demo1
y people_demo2
, del objeto people_typ
creado en Colecciones de tablas: Ejemplos. El ejemplo muestra cómo actualizar una fila de people_demo1
seleccionando una fila de people_demo2
:
El ejemplo usa el VALUE
función de referencia de objeto tanto en la cláusula SET
como en la subconsulta.
Actualización correlacionada: Ejemplo Para un ejemplo que utiliza una subconsulta correlacionada para actualizar filas de tablas anidadas, consulte «Colecciones de tablas: ejemplos».
Uso de la cláusula RETURNING durante la ACTUALIZACIÓN: ejemplo El siguiente ejemplo devuelve valores de la fila actualizada y almacena el resultado en PL / Variables SQL bnd1
, bnd2
, bnd3
:
El El siguiente ejemplo muestra que puede especificar una función agregada de un solo conjunto en la expresión de la cláusula de devolución:
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 100 RETURNING SUM(salary) INTO :bnd1;