Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Returning

Última atualização: Jun 29, 2026

Este tópico descreve o recurso Returning do AliSQL. Esse recurso permite que instruções de linguagem de manipulação de dados (DML) retornem conjuntos de resultados e fornece o pacote DBMS_TRANS para rastrear a execução dessas instruções.

Informações básicas

Os resultados da execução de instruções MySQL dividem-se em três tipos: conjuntos de resultados, pacotes OK e pacotes ERR. Um pacote OK ou ERR contém atributos como o número de registros afetados e verificados. No entanto, a execução de uma instrução DML (INSERT, UPDATE ou DELETE) frequentemente é seguida pela execução de uma instrução SELECT para consultar os registros atuais. Nesses casos, o recurso Returning permite que o servidor responda ao cliente apenas uma vez ao combinar os resultados das duas instruções em um único conjunto de resultados.

Pré-requisitos

A instância deve executar o RDS MySQL 8.0 ou 8,4.

Sintaxe

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

A tabela a seguir descreve os parâmetros necessários.

Parâmetro

Descrição

Field_list

Campos a retornar. Para especificar vários campos, separe-os por vírgulas (,). É possível especificar campos da tabela ou usar o caractere curinga (*). Não há suporte para operações como cálculos ou agregações.

Statement

Instrução DML a executar. Há suporte para INSERT, UPDATE e DELETE.

Precauções

A instrução dbms_trans.returning() não é transacional. Ela herda o contexto de transação da instrução DML. Para encerrar a transação, confirme-a (commit) ou reverta-a (rollback) explicitamente.

INSERT Returning

O servidor retorna os registros inseridos na tabela especificada pela instrução INSERT.

Exemplo:

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
  • Se o parâmetro Field_list não for especificado, o recurso Returning retornará um pacote OK ou ERR em vez de um 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)
  • O INSERT Returning suporta apenas a sintaxe insert values. Não há suporte para outras sintaxes, como create as e insert select.

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

UPDATE Returning

O servidor retorna os registros atualizados na tabela especificada pela instrução UPDATE.

Exemplo:

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

O UPDATE Returning não suporta instruções UPDATE de múltiplas tabelas.

DELETE Returning

O servidor retorna os registros excluídos da tabela especificada pela instrução DELETE.

Exemplo:

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)