SQLiteのほとんどのものと同様に、データベース内の一時テーブルのリストを取得する方法は複数あります。
ここでは、SQLiteで一時テーブルを返す2つの方法を紹介します。
.tablesコマンド
SQLiteコマンドラインシェルに精通している場合は、おそらく.tables
について知っているでしょう。 ドットコマンド。このコマンドは、特定のパターンに一致するすべてのテーブル(または、パターンが指定されていない場合は単にすべてのテーブル)を一覧表示します。これには一時テーブルが含まれます。
例:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
結果:
Products temp.TempProducts vProducts
この場合、永続的なテーブルが1つあります(Products
)、1つのビュー(vProducts
)、および1つの一時テーブル(temp.TempProducts
。
したがって、一時テーブルと永続テーブルの両方が返されることがわかります。一時テーブルで、一時テーブル専用のプレフィックスなど、固定の命名規則を使用している場合は、パターンマッチングを使用して、一時テーブルのみを取得できます。
例:
.tables temp%
結果:
temp.TempProducts
ただし、命名規則は、全員がそれに従う場合にのみ有効です。
結果に永続的なテーブルを返したくない場合は、 sqlite_temp_masterにクエリを実行することをお勧めします。 表(下)。
sqlite_temp_masterテーブル
SQLiteにはsqlite_temp_masterがあります 一時テーブルとそのインデックスおよびトリガーを含むテーブル。このテーブルは、一時テーブルを作成したアプリケーションにのみ表示されます。
このテーブルは次のようにクエリできます:
SELECT name FROM sqlite_temp_master;
結果:
TempProducts
この例では、テーブル名のみを返しますが、アスタリスク(*
)を自由に使用してください。 )すべての列を返します。
前述のように、このテーブルには永続的なテーブルは含まれていません。一時テーブルと永続テーブルの両方を返す必要があり、.temp
を使用できない場合 、 sqlite_masterを含めることができます クエリのテーブル。
例:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
結果:
Products TempProducts
ビューを含める場合は、次のようにします。
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
結果:
Products TempProducts vProducts