シナリオによっては、1つ以上のSELECTステートメントに含まれる列だけでなく、サービスまたはモジュールのIMCIを作成する必要があります。 この場合、IMCIを繰り返し作成しないようにするには、最初にdbms_imci.columnar_advise_begin()
ストアドプロシージャを呼び出し、次にdbms_imci.columnar_advise()
ストアドプロシージャをバッチで呼び出します。 最後に、dbms_imci.columnar_advise_show()
ストアドプロシージャを呼び出して、DDLステートメントをバッチ取得できます。
前提条件
PolarDBクラスターでは、次のいずれかのバージョンを使用します。
リビジョンバージョンが8.0.1.1.30以降のPolarDB for MySQL 8.0.1のクラスター。
リビジョンバージョンが8.0.2.2.12以降のPolarDB for MySQL 8.0.2のクラスター。
指定されたテーブルに対する読み取り (SELECT) 権限があること。
構文
dbms_imci.columnar_advise_begin()
dbms_imci.columnar_advise_begin()
ストアドプロシージャは、メソッドがDDLステートメントをバッチ取得できるようにするために使用されます。dbms_imci.columnar_advise()
ストアドプロシージャが呼び出されてもDDL文はすぐには表示されませんが、メモリにキャッシュされます。 キャッシュ処理中に重複するテーブル名と列名は記録されません。 最後に、ストアドプロシージャdbms_imci.columnar_advise_show()
またはdbms_imci.columnar_advise_show_by_columns()
を呼び出して、DDLステートメントを明示的に取得できます。説明dbms_imci.columnar_advise_begin()
およびdbms_imci.columnar_advise_by_columns()
ストアドプロシージャを順番に呼び出すことは、dbms_imci.columnar_advise()
ストアドプロシージャを呼び出すことと同じです。dbms_imci.columnar_advise_show()
dbms_imci.columnar_advise()
ストアドプロシージャを呼び出して取得したDDLステートメントをテーブルごとに表示します。 重複したテーブル名は表示されません。dbms_imci.columnar_advise_show_by_columns()
dbms_imci.columnar_advise()
ストアドプロシージャを呼び出して取得したDDLステートメントを列ごとに表示します。 重複する列名は表示されません。dbms_imci.columnar_advise_end()
DDL文をバッチ取得するメソッドを終了し、キャッシュをクリアします。
dbms_imci.columnar_advise_show()
およびdbms_imci.columnar_advise_show_by_columns()
ストアドプロシージャを繰り返し呼び出してから、dbms_imci.columnar_advise_end()
ストアドプロシージャを呼び出します。dbms_imci.columnar_advise_show()
ストアドプロシージャの後にdbms_imci.columnar_advise_end()
ストアドプロシージャを呼び出すと、エラーメッセージが返されます。
注意事項
dbms_imci.columnar_advise()
中間結果のキャッシュに使用される最大メモリは、imci_columnar_advise_buffer_size
パラメーターによって決まります。 デフォルト値は8 MBで、通常、数千のテーブルのDDL文をキャッシュできます。 DDLステートメントをさらにキャッシュする場合は、SETステートメントを実行してimci_columnar_advise_buffer_size
パラメーターを変更できます。 例:SET imci_columnar_advise_buffer_size = 16777216;
dbms_imci.columnar_advise_end()
ストアドプロシージャが呼び出されない場合でも、リンクが切断されるとdbms_imci.columnar_advise()
キャッシュはクリアされます。
例
t1
およびt2
の表は、以下の実施例で使用される。
次のステートメントを実行して、
test
データベースに切り替えます。使用テスト;
次のステートメントを実行して、
t1
およびt2
テーブルを作成します。create table t1 (a int, b int) engine = innodb; 作成テーブルt2 (a int, b int) engine = innodb;
メソッドを有効にして、DDLステートメントをバッチ取得します。
dbms_imci.columnar_advise_begin();
dbms_imci.columnar_adviseをdbms_imci.columnar_advise()
ストアドプロシージャを一括実行します。呼び出します (t1.a = t2.aグループby t1.b 'のt1 inner join t2から 'select count(t1.a)'); dbms_imci.columnar_adviseを呼び出します (t1.a = t2.aグループby t1.bのt1 inner join t2から 'select count(t1.a) '); dbms_imci.columnar_adviseを呼び出します (t1.a = t2.aグループby t1.bのt1 inner join t2から 'select count(t1.a) '); dbms_imci.columnar_adviseを呼び出します ('select count(t1.a) from t1 inner join t2 on t1.a = t2.a group by t1.b ');
DDLステートメントを明示的に取得します。
dbms_imci.columnar_advise()
ストアドプロシージャを呼び出して取得したDDLステートメントをテーブルごとに表示します。dbms_imci.columnar_advise_show();
サンプル結果:
+ ------------------------------------------- + | DDL_STATEMENT | + ------------------------------------------- + | ALTER TABLE test.t1 COMMENT='COLUMNAR=1 '; | | ALTER TABLE test.t2 COMMENT='COLUMNAR=1 '; | + ------------------------------------------- + セットの2列 (0.00秒)
dbms_imci.columnar_advise()
ストアドプロシージャを呼び出して取得したDDLステートメントをテーブルごとに表示します。call dbms_imci.columnar_advise_show_by_columns();
サンプル結果:
+ ------------------------------------------------------------------------------------------------------------------------------------------- + | 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列 (0.00秒)
メソッドを終了して、DDL文をバッチ取得し、キャッシュをクリアします。
dbms_imci.columnar_advise_end() を呼び出します。
サンプル結果:
クエリOK、影響を受ける0行 (0.11秒)