Todos os produtos
Search
Central de documentação

PolarDB:Returning

Última atualização: Jun 28, 2026

Após executar uma instrução INSERT, UPDATE ou DELETE, o recurso Returning devolve as linhas afetadas imediatamente, sem exigir uma consulta SELECT subsequente. Esse recurso é útil para recuperar valores gerados pelo banco de dados, como IDs AUTO_INCREMENT ou valores DEFAULT de colunas.

Pré-requisitos

Antes de começar, verifique se:

Como funciona

O MySQL padrão retorna apenas uma mensagem OK ou ERR após uma instrução DML. Essa mensagem inclui o número de linhas afetadas e verificadas, mas não os dados reais das linhas. Para inspecionar os dados, normalmente você precisa executar um SELECT subsequente, o que gera uma segunda viagem de ida e volta ao servidor.

O recurso Returning elimina essa segunda viagem. Chame DBMS_TRANS.RETURNING() com sua instrução DML e uma lista de colunas. O procedimento executa a DML e retorna as linhas correspondentes em uma única resposta.

CALL DBMS_TRANS.RETURNING() não é uma instrução transacional. Ela herda o contexto de transação da instrução DML fornecida. Confirme (commit) ou reverta (rollback) a transação explicitamente.

Sintaxe

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

Parâmetros

Parâmetro

Descrição

Field_list

Lista de colunas separadas por vírgula a retornar, ou * para todas as colunas. Não há suporte a expressões de cálculo e agregação. Passe uma string vazia ("") para suprimir o conjunto de resultados e retornar apenas a mensagem OK ou ERR.

Statement

Instrução DML a executar. Tipos compatíveis: INSERT, UPDATE, DELETE.

Limitações

  • INSERT: Há suporte apenas para instruções INSERT ... VALUES. Não há suporte para INSERT ... SELECT e CREATE TABLE ... AS SELECT. Executar uma forma incompatível retorna ERROR 7527 (HY000): Statement didn't support RETURNING clause.

  • UPDATE: Não há suporte para instruções UPDATE de múltiplas tabelas.

Exemplos

Todos os exemplos usam a seguinte tabela:

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

Retorne todas as colunas das linhas inseridas, incluindo o id AUTO_INCREMENT e os valores DEFAULT de col2 gerados pelo banco de dados:

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 o conjunto de resultados e retornar apenas a mensagem OK ou ERR, passe uma string vazia 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

Retorne as linhas atualizadas com os novos valores de coluna:

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

Retorne as linhas excluídas com os valores anteriores à exclusão:

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)