Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Returning

Última actualización: Oct 09, 2026

Este tema describe la función Returning de AliSQL. Esta función permite que las instrucciones del lenguaje de manipulación de datos (DML) devuelvan conjuntos de resultados y proporciona el paquete DBMS_TRANS para dar seguimiento a la ejecución de dichas instrucciones.

Contexto

Los resultados de ejecución de las instrucciones de MySQL se dividen en tres tipos: conjuntos de resultados, paquetes OK y paquetes ERR. Un paquete OK o ERR contiene atributos como el número de registros afectados y el número de registros analizados. Sin embargo, después de ejecutar una instrucción DML (INSERT, UPDATE o DELETE), suele ejecutarse la instrucción SELECT para consultar los registros actuales. En estos casos, la función Returning permite que el servidor responda al cliente una sola vez, ya que combina los resultados de ambas instrucciones en un único conjunto de resultados.

Requisitos previos

La instancia debe ejecutar RDS MySQL 8.0 u 8.4.

Sintaxis

DBMS_TRANS.returning(<Field_list>,<Statement>);

A continuación se describen los parámetros que debe configurar.

Parámetro

Descripción

Field_list

Campos que se van a devolver. Para especificar varios campos, sepárelos con comas (,). Puede indicar campos de la tabla o usar el comodín (*). No se admiten operaciones como cálculos o agregaciones.

Statement

Instrucción DML que se va a ejecutar. Se admiten INSERT, UPDATE y DELETE.

Precauciones

La instrucción dbms_trans.returning() no es transaccional, ya que hereda el contexto de transacción de la instrucción DML. Para finalizar la transacción, debe confirmarla (commit) o revertirla (rollback) de manera explícita.

INSERT Returning

El servidor devuelve los registros que se insertaron en la tabla especificada mediante la instrucción INSERT.

Ejemplo:

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;

mysql> call dbms_trans.returning("*", "insert into t(id) values(NULL),(NULL)");
+----+------+---------------------+
| 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)
Nota
  • Si no especifica el parámetro Field_list, la función Returning devuelve un paquete OK o ERR en lugar de un conjunto de resultados.

    mysql> call dbms_trans.returning("", "insert into t(id) values(NULL),(NULL)");
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from t;
    +----+------+---------------------+
    | id | col1 | col2                |
    +----+------+---------------------+
    |  1 |    1 | 2019-09-03 10:40:55 |
    |  2 |    1 | 2019-09-03 10:40:55 |
    |  3 |    1 | 2019-09-03 10:41:06 |
    |  4 |    1 | 2019-09-03 10:41:06 |
    +----+------+---------------------+
    4 rows in set (0.00 sec)
  • INSERT Returning solo admite la sintaxis insert values. Otras sintaxis, como create as y insert select, no son compatibles.

    mysql> call dbms_trans.returning("", "insert into t select * from t");
    ERROR 7527 (HY000): Statement didn't support RETURNING clause

UPDATE Returning

El servidor devuelve los registros que se actualizaron en la tabla especificada mediante la instrucción UPDATE.

Ejemplo:

mysql> call dbms_trans.returning("id, col1, col2", "update t set col1 = 2 where id >2");
+----+------+---------------------+
| 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)
Nota

UPDATE Returning no admite instrucciones UPDATE que afecten varias tablas.

DELETE Returning

El servidor devuelve los registros que se eliminaron de la tabla especificada mediante la instrucción DELETE.

Ejemplo:

mysql> call dbms_trans.returning("id, col1, col2", "delete from t where id < 3");
+----+------+---------------------+
| 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)