All Products
Search
Document Center

PolarDB:Returning

Last Updated:Mar 29, 2026

Setelah menjalankan pernyataan INSERT, UPDATE, atau DELETE, fitur Returning langsung mengembalikan baris yang terpengaruh—tanpa memerlukan pernyataan SELECT tambahan. Fitur ini berguna untuk mengambil nilai yang dihasilkan oleh database, seperti ID AUTO_INCREMENT atau nilai kolom DEFAULT.

Prasyarat

Sebelum memulai, pastikan bahwa:

  • Kluster PolarDB for MySQL Anda menjalankan versi 5.7 dengan revisi versi 5.7.1.0.6 atau lebih baru. Untuk memeriksa versi Anda, lihat Query the engine version.

Cara kerja

MySQL standar hanya mengembalikan pesan OK atau ERR setelah pernyataan DML. Pesan tersebut mencakup jumlah baris yang terpengaruh dan dipindai, tetapi tidak berisi data baris aktualnya. Untuk memeriksa datanya, biasanya Anda harus menjalankan pernyataan SELECT tambahan—yang berarti memerlukan komunikasi putaran kedua ke server.

Fitur Returning menghilangkan kebutuhan akan komunikasi putaran kedua tersebut. Panggil DBMS_TRANS.RETURNING() bersama dengan pernyataan DML dan daftar kolom. Prosedur ini menjalankan DML dan mengembalikan baris yang sesuai dalam satu respons.

CALL DBMS_TRANS.RETURNING() bukan merupakan pernyataan transaksional. Prosedur ini mewarisi konteks transaksi dari pernyataan DML yang Anda berikan. Lakukan commit atau rollback transaksi secara eksplisit.

Sintaksis

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

Parameter

ParameterDescription
Field_listDaftar kolom yang dipisahkan koma untuk dikembalikan, atau * untuk semua kolom. Ekspresi perhitungan dan agregasi tidak didukung. Berikan string kosong ("") untuk menonaktifkan set hasil dan hanya mengembalikan pesan OK atau ERR.
StatementPernyataan DML yang akan dijalankan. Jenis yang didukung: INSERT, UPDATE, DELETE.

Batasan

  • INSERT: Hanya pernyataan INSERT ... VALUES yang didukung. Pernyataan INSERT ... SELECT dan CREATE TABLE ... AS SELECT tidak didukung. Menjalankan bentuk yang tidak didukung akan menghasilkan ERROR 7527 (HY000): Statement didn't support RETURNING clause.

  • UPDATE: Pernyataan UPDATE multi-tabel tidak didukung.

Contoh

Semua contoh menggunakan tabel berikut:

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

Kembalikan semua kolom untuk baris yang dimasukkan, termasuk id AUTO_INCREMENT dan nilai col2 DEFAULT yang dihasilkan oleh database:

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

Hasil:

+----+------+---------------------+
| 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)

Untuk menonaktifkan set hasil dan hanya mengembalikan pesan OK atau ERR, berikan string kosong sebagai Field_list:

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

Hasil:

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

UPDATE

Kembalikan baris yang diperbarui beserta nilai kolom barunya:

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

Hasil:

+----+------+---------------------+
| 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

Kembalikan baris yang dihapus beserta nilainya sebelum penghapusan:

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

Hasil:

+----+------+---------------------+
| 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)