全部产品
Search
文档中心

PolarDB:Mengembalikan

更新时间:Jul 06, 2025

PolarDB menyediakan fitur Mengembalikan. Setelah mengeksekusi pernyataan DML, sebuah resultset akan dikembalikan. Topik ini menjelaskan cara menggunakan fitur PolarDB Mengembalikan.

Prasyarat

Versi kluster PolarDB adalah PolarDB untuk MySQL 5.7 dengan revisi versi 5.7.1.0.6 atau yang lebih baru. Untuk informasi lebih lanjut tentang cara memeriksa versi, lihat Kueri versi mesin.

Informasi latar belakang

Secara umum, pesan OK atau ERR dikembalikan setelah mengeksekusi pernyataan DML di MySQL. Pesan-pesan ini hanya mencakup jumlah baris yang dikelola dan baris yang dipindai. Namun, resultset dari catatan data tidak dikembalikan. Dalam banyak kasus, setelah mengeksekusi pernyataan DML seperti INSERT, UPDATE, dan DELETE, Anda harus mengeksekusi pernyataan SELECT untuk memeriksa catatan data guna menghindari kesalahan. Hal ini memastikan akurasi operasi DML dan data.

Untuk mengurangi interaksi antara klien dan server serta memastikan kompatibilitas dengan sintaks MySQL, PolarDB menyediakan fitur Mengembalikan. Setelah mengeksekusi pernyataan DML, sebuah resultset akan dikembalikan.

Sintaks

CALL DBMS_TRANS.RETURNING(Field_list=>, Statement=>);
Catatan Pernyataan CALL DBMS_TRANS.RETURNING() bukanlah pernyataan transaksional. Pernyataan tersebut mewarisi konteks transaksi berdasarkan pernyataan DML yang ingin dieksekusi. Anda harus melakukan commit atau rollback transaksi.

Tabel berikut menjelaskan parameter:

ParameterDeskripsi
Field_listKolom yang akan dikembalikan. Pisahkan beberapa kolom dengan koma (,). Kolom harus memenuhi persyaratan berikut:
  • Hanya kolom yang ada di tabel atau tanda bintang (*) yang menentukan semua kolom yang didukung.
  • Operasi seperti perhitungan atau agregasi pada kolom tidak didukung.
StatementPernyataan DML yang akan dieksekusi. Pernyataan berikut didukung:
  • INSERT
  • UPDATE
  • DELETE

Contoh

Tabel t, yang dibuat dengan mengeksekusi pernyataan berikut, digunakan dalam contoh-contoh berikut. Contoh-contoh ini menjelaskan cara menggunakan fitur Mengembalikan untuk mengembalikan resultset untuk pernyataan DML.

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
    Catatan Ketika menggunakan fitur Mengembalikan untuk pernyataan INSERT, hanya pernyataan insert values yang didukung. Pernyataan seperti create as dan insert select tidak didukung. Misalnya, jika Anda mengeksekusi CALL DBMS_TRANS.RETURNING("", "insert into t select * from t");, kesalahan seperti ERROR 7527 (HY000): Statement didn't support RETURNING clause akan terjadi.
    Eksekusi pernyataan berikut untuk melihat catatan data yang akan dimasukkan oleh pernyataan INSERT:
    CALL DBMS_TRANS.RETURNING("*", "insert into t(id) values(NULL),(NULL)");
    Hasil berikut dikembalikan:
    +----+------+---------------------+
    | 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)
    Jika Anda mengatur Field_list menjadi string kosong, misalnya, Anda mengeksekusi pernyataan call dbms_trans.returning("", "insert into t(id) values(NULL),(NULL)");, hanya pesan OK atau ERR yang dikembalikan. Contoh:
    Query OK, 2 rows affected (0.01 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    Untuk melihat catatan data dari tabel saat ini, eksekusi pernyataan select * from t;. Hasil berikut dikembalikan:
    +----+------+---------------------+
    | 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)
  • UPDATE
    Catatan Fitur Mengembalikan tidak mendukung pernyataan UPDATE yang dieksekusi pada beberapa tabel.
    Eksekusi pernyataan berikut untuk melihat catatan yang diperbarui oleh pernyataan UPDATE:
    CALL DBMS_TRANS.RETURNING("id, col1, col2", "update t set col1 = 2 where id >2");
    Hasil berikut dikembalikan:
    +----+------+---------------------+
    | 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
    Eksekusi pernyataan berikut untuk melihat catatan yang dihapus oleh pernyataan DELETE:
    CALL DBMS_TRANS.RETURNING("id, col1, col2", "delete from t where id < 3");
    Hasil berikut dikembalikan:
    +----+------+---------------------+
    | 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)