エイリアスの使い方/パラメータをとるエイリアス

いくつかの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ファイルを保管するパス

トップ