This Project Has Not Released Any Files
いくつかのDBMS用に提供される「ls tables」は、パラメータをとります。
たとえば、「ls tables test%」というコマンドを実行した場合、MySQLではtestで始まるテーブル名を出力します。
これは、「test%」がパラメータ値として解釈され、ls_tables.sqlが実行される際に「--<START_PARAMETERS>」と「--<END_PARAMETERS>」に囲まれた「&1」というパラメータが置換されるためです。
ls_tables.sqlの内容
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE FROM information_schema.TABLES WHERE TABLE_TYPE like '%TABLE' --<START_PARAMETERS> --<%> AND TABLE_NAME like '&1' --<END_PARAMETERS> ORDER BY TABLE_SCHEMA, TABLE_NAME;
「--<START_PARAMETERS>」タグと「--<END_PARAMETERS>」タグに囲まれた部分はエイリアスがパラメータをとる場合にだけ処理され、パラメータが指定されたパラメータ値に置換されます。
「ls tables test%」のコマンドを実行した際にこれらタグに囲まれた部分は「AND TABLE_NAME like 'test%'」と変換されます。パラメータが指定されていない場合は、これらのタグで囲まれた部分は完全に無視されます。この処理の様子は「\set verbose on」というコマンドを実行すると確認できます。(「\set verbose on」は冗長な出力を有効にします。不要になったら「\set verbose off」で無効にしてください。)
12:00:00 sql> \set verbose on 12:00:00 sql> ls tables test% INFO: [SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, DATA_LENGTH, M AX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE FROM information_schema.TABLES WHERE TABLE_TYPE like '%TABLE' AND TABLE_NAME like 'test%' ORDER BY TABLE_SCHEM A, TABLE_NAME] ~エイリアスの実行結果~
「ls tables test%」の例では「test%」がパラメータとして扱われますが、これはとても単純な処理に基づいています。
「ls tables」はエイリアスインデックスで以下のように定義されています。
ALIASCMD.LS.TABLES=@ls_tables.sql
エイリアスキー名の「ALIASCMD.」を除いた文字の「.」を空白文字としたものが実際のエイリアス名(大文字と小文字は区別しない)となり、「LS TABLES」以降に空白文字とそれ以外からなる文字についてはパラメータとして取り扱います。
たとえば、「ls tables test1 testX testY」では、SQLのファイル中で、「&1」は「test1」、「&2」は「testX」、「&3」は「testY」として置換されます。
(実際には、ls_tables.sqlでは&2と&3は記述されていないので無視されます)
エイリアスとは?へ
登録されているエイリアスの一覧へ
エイリアスの種類へ
エイリアスの登録の方法へ
パラメータをとるエイリアス
SQLファイルを保管するパスへ
トップへ
[PageInfo]
LastUpdate: 2008-11-15 01:00:06, ModifiedBy: t_moriyama
[Permissions]
view:all, edit:members, delete/config:members