Todos los productos
Search
Centro de documentos

PolarDB:Returning

Última actualización: Sep 05, 2026

Después de ejecutar una instrucción INSERT, UPDATE o DELETE, la función Returning devuelve las filas afectadas de inmediato, sin necesidad de un SELECT posterior. Esto resulta útil para recuperar valores generados por la base de datos, como identificadores AUTO_INCREMENT o valores DEFAULT de columnas.

Requisitos previos

Antes de empezar, asegúrese de que:

  • Su clúster de PolarDB for MySQL ejecute la versión 5.7 con la versión de revisión 5.7.1.0.6 o posterior. Para comprobar su versión, consulte Query the engine version.

Cómo funciona

MySQL estándar solo devuelve un mensaje OK o ERR después de una instrucción DML. Este mensaje incluye el número de filas afectadas y examinadas, pero no los datos reales de las filas. Para inspeccionar los datos, normalmente se ejecuta un SELECT posterior, lo que implica un segundo viaje de ida y vuelta al servidor.

La función Returning elimina ese segundo viaje de ida y vuelta. Llame a DBMS_TRANS.RETURNING() con su instrucción DML y una lista de columnas. El procedimiento ejecuta la instrucción DML y devuelve las filas coincidentes en una sola respuesta.

CALL DBMS_TRANS.RETURNING() no es una instrucción transaccional. Hereda el contexto de transacción de la instrucción DML que usted pase. Confirme o revierta la transacción de forma explícita.

Sintaxis

CALL DBMS_TRANS.RETURNING(Field_list=>, Statement=>);

Parámetros

Parámetro

Descripción

Field_list

Lista de columnas separadas por comas que se van a devolver, o bien * para todas las columnas. No se admiten expresiones de cálculo ni de agregación. Pase una cadena vacía ("") para suprimir el conjunto de resultados y devolver únicamente el mensaje OK o ERR.

Statement

La instrucción DML que se va a ejecutar. Tipos compatibles: INSERT, UPDATE y DELETE.

Limitaciones

  • INSERT: Solo se admiten instrucciones INSERT ... VALUES. Las instrucciones INSERT ... SELECT y CREATE TABLE ... AS SELECT no son compatibles. Si ejecuta una variante no compatible, se devuelve ERROR 7527 (HY000): Statement didn't support RETURNING clause.

  • UPDATE: No se admiten instrucciones UPDATE de varias tablas.

Ejemplos

Todos los ejemplos usan la siguiente tabla:

CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `col1` int(11) NOT NULL DEFAULT '1',
  `col2` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT

Devuelva todas las columnas de las filas insertadas, incluidos los valores AUTO_INCREMENT de id y DEFAULT de col2 generados por la base de datos:

CALL DBMS_TRANS.RETURNING("*", "insert into t(id) values(NULL),(NULL)");

Resultado:

+----+------+---------------------+
| id | col1 | col2                |
+----+------+---------------------+
|  1 |    1 | 2019-09-03 10:39:05 |
|  2 |    1 | 2019-09-03 10:39:05 |
+----+------+---------------------+
2 rows in set (0.01 sec)

Para suprimir el conjunto de resultados y devolver únicamente el mensaje OK o ERR, pase una cadena vacía como Field_list:

CALL DBMS_TRANS.RETURNING("", "insert into t(id) values(NULL),(NULL)");

Resultado:

Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

UPDATE

Devuelva las filas actualizadas con sus nuevos valores de columna:

CALL DBMS_TRANS.RETURNING("id, col1, col2", "update t set col1 = 2 where id > 2");

Resultado:

+----+------+---------------------+
| id | col1 | col2                |
+----+------+---------------------+
|  3 |    2 | 2019-09-03 10:41:06 |
|  4 |    2 | 2019-09-03 10:41:06 |
+----+------+---------------------+
2 rows in set (0.01 sec)

DELETE

Devuelva las filas eliminadas con los valores que tenían antes de la eliminación:

CALL DBMS_TRANS.RETURNING("id, col1, col2", "delete from t where id < 3");

Resultado:

+----+------+---------------------+
| id | col1 | col2                |
+----+------+---------------------+
|  1 |    1 | 2019-09-03 10:40:55 |
|  2 |    1 | 2019-09-03 10:40:55 |
+----+------+---------------------+
2 rows in set (0.00 sec)