Dalam beberapa skenario, Anda perlu membuat IMCI untuk layanan atau modul, bukan hanya untuk kolom yang terlibat dalam satu atau lebih pernyataan SELECT. Untuk menghindari pembuatan IMCI berulang kali, Anda dapat memanggil prosedur tersimpan dbms_imci.columnar_advise_begin(), lalu menjalankan prosedur tersimpan dbms_imci.columnar_advise() secara batch. Terakhir, panggil prosedur tersimpan dbms_imci.columnar_advise_show() untuk mendapatkan pernyataan DDL secara batch.
Prasyarat
Kluster PolarDB Anda menggunakan salah satu versi berikut:
Kluster PolarDB for MySQL 8.0.1 dengan versi revisi 8.0.1.1.30 atau lebih baru.
Kluster PolarDB for MySQL 8.0.2 dengan versi revisi 8.0.2.2.12 atau lebih baru.
Anda memiliki izin baca (SELECT) pada tabel yang ditentukan.
Sintaksis
dbms_imci.columnar_advise_begin()
Prosedur tersimpan
dbms_imci.columnar_advise_begin()digunakan untuk mengaktifkan metode pengambilan pernyataan DDL secara batch. Saat prosedur tersimpandbms_imci.columnar_advise()dipanggil, pernyataan DDL tidak langsung ditampilkan tetapi disimpan di memori. Nama tabel dan kolom duplikat tidak dicatat selama penyimpanan. Setelah itu, Anda dapat memanggil prosedur tersimpandbms_imci.columnar_advise_show()ataudbms_imci.columnar_advise_show_by_columns()untuk mendapatkan pernyataan DDL secara eksplisit.CatatanMemanggil prosedur tersimpan
dbms_imci.columnar_advise_begin()dandbms_imci.columnar_advise_by_columns()secara berurutan setara dengan memanggil prosedur tersimpandbms_imci.columnar_advise().dbms_imci.columnar_advise_show()
Menampilkan pernyataan DDL yang diperoleh melalui pemanggilan prosedur tersimpan
dbms_imci.columnar_advise()berdasarkan tabel. Nama tabel duplikat tidak ditampilkan.dbms_imci.columnar_advise_show_by_columns()
Menampilkan pernyataan DDL yang diperoleh melalui pemanggilan prosedur tersimpan
dbms_imci.columnar_advise()berdasarkan kolom. Nama kolom duplikat tidak ditampilkan.dbms_imci.columnar_advise_end()
Mengakhiri metode pengambilan pernyataan DDL secara batch dan membersihkan cache. Anda dapat memanggil prosedur tersimpan
dbms_imci.columnar_advise_show()dandbms_imci.columnar_advise_show_by_columns()berulang kali sebelum memanggil prosedur tersimpandbms_imci.columnar_advise_end(). Jika Anda memanggil prosedur tersimpandbms_imci.columnar_advise_show()setelah prosedur tersimpandbms_imci.columnar_advise_end(), pesan kesalahan akan dikembalikan.
Perhatian
Memori maksimum untuk menyimpan hasil antara dari
dbms_imci.columnar_advise()ditentukan oleh parameterimci_columnar_advise_buffer_size. Nilai defaultnya adalah 8 MB, yang biasanya cukup untuk menyimpan pernyataan DDL untuk ribuan tabel. Jika Anda ingin menyimpan lebih banyak pernyataan DDL, Anda dapat mengeksekusi pernyataan SET untuk mengubah parameterimci_columnar_advise_buffer_size. Contoh:SET imci_columnar_advise_buffer_size = 16777216;.Bahkan jika prosedur tersimpan
dbms_imci.columnar_advise_end()tidak dipanggil, cachedbms_imci.columnar_advise()dibersihkan saat koneksi terputus.
Contoh
Tabel t1 dan t2 digunakan dalam contoh-contoh berikut.
Eksekusi pernyataan berikut untuk beralih ke database
test:use test;Eksekusi pernyataan berikut untuk membuat tabel
t1dant2:create table t1 (a int, b int) engine = innodb; create table t2 (a int, b int) engine = innodb;Aktifkan metode untuk mendapatkan pernyataan DDL secara batch.
call dbms_imci.columnar_advise_begin();Eksekusi prosedur tersimpan
dbms_imci.columnar_advise()secara batch.call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b'); call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b'); call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b'); call dbms_imci.columnar_advise('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b');Dapatkan pernyataan DDL secara eksplisit.
Tampilkan pernyataan DDL yang diperoleh melalui pemanggilan prosedur tersimpan
dbms_imci.columnar_advise()berdasarkan tabel.call dbms_imci.columnar_advise_show();Hasil sampel:
+-------------------------------------------+ | DDL_STATEMENT | +-------------------------------------------+ | ALTER TABLE test.t1 COMMENT='COLUMNAR=1'; | | ALTER TABLE test.t2 COMMENT='COLUMNAR=1'; | +-------------------------------------------+ 2 rows in set (0.00 sec)Tampilkan pernyataan DDL yang diperoleh melalui pemanggilan prosedur tersimpan
dbms_imci.columnar_advise()berdasarkan kolom.call dbms_imci.columnar_advise_show_by_columns();Hasil sampel:
+-------------------------------------------------------------------------------------------------------------------------------------------+ | DDL_STATEMENT | +-------------------------------------------------------------------------------------------------------------------------------------------+ | ALTER TABLE test.t1 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1', MODIFY COLUMN b int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; | | ALTER TABLE test.t2 MODIFY COLUMN a int(11) DEFAULT NULL COMMENT 'COLUMNAR=1'; | +-------------------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
Hentikan metode untuk mendapatkan pernyataan DDL secara batch dan bersihkan cache.
call dbms_imci.columnar_advise_end();Hasil sampel:
Query OK, 0 rows affected (0.11 sec)