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=>);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:
| Parameter | Deskripsi |
Field_list | Kolom yang akan dikembalikan. Pisahkan beberapa kolom dengan koma (,). Kolom harus memenuhi persyaratan berikut:
|
Statement | Pernyataan DML yang akan dieksekusi. Pernyataan berikut didukung:
|
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;- INSERTCatatan Ketika menggunakan fitur Mengembalikan untuk pernyataan INSERT, hanya pernyataan
insert valuesyang didukung. Pernyataan seperticreate asdaninsert selecttidak didukung. Misalnya, jika Anda mengeksekusiCALL DBMS_TRANS.RETURNING("", "insert into t select * from t");, kesalahan sepertiERROR 7527 (HY000): Statement didn't support RETURNING clauseakan 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 mengaturField_listmenjadi string kosong, misalnya, Anda mengeksekusi pernyataancall 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: 0Untuk melihat catatan data dari tabel saat ini, eksekusi pernyataanselect * 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) - UPDATECatatan 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) - DELETEEksekusi 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)