Comme pour la plupart des choses dans SQLite, il existe plusieurs façons d'obtenir une liste de tables temporaires dans une base de données.
Ici, je présente deux façons de renvoyer des tables temporaires dans SQLite.
La commande .tables
Si vous êtes familier avec le shell de ligne de commande SQLite, vous connaissez probablement le .tables
commande point. Cette commande répertorie toutes les tables correspondant à un modèle donné (ou simplement toutes les tables, si aucun modèle n'est donné). Cela inclut les tables temporaires.
Exemple :
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Résultat :
Products temp.TempProducts vProducts
Dans ce cas, j'ai une table permanente (Products
), une vue (vProducts
) et une table temporaire (temp.TempProducts
).
Ainsi, vous pouvez voir que les tables temporaires et permanentes sont renvoyées. Si vos tables temporaires utilisent une convention de dénomination fixe, comme un préfixe réservé uniquement aux tables temporaires, vous pouvez utiliser la correspondance de modèle pour récupérer uniquement les tables temporaires.
Exemple :
.tables temp%
Résultat :
temp.TempProducts
Cependant, les conventions de nommage ne sont bonnes que tant que tout le monde les suit.
Si vous ne voulez pas que les tables permanentes soient renvoyées dans vos résultats, vous feriez probablement mieux d'interroger le sqlite_temp_master tableau (ci-dessous).
Le tableau sqlite_temp_master
SQLite a un sqlite_temp_master table qui contient des tables temporaires et leurs index et déclencheurs. Cette table n'est visible que par l'application qui a créé la table temporaire.
Vous pouvez interroger cette table comme ceci :
SELECT name FROM sqlite_temp_master;
Résultat :
TempProducts
Dans cet exemple, je renvoie uniquement le nom de la table, mais n'hésitez pas à utiliser un astérisque (*
) pour renvoyer toutes les colonnes.
Comme mentionné, ce tableau n'inclut pas les tables permanentes. Si vous devez renvoyer des tables temporaires et permanentes et que vous ne pouvez pas utiliser .temp
, vous pouvez inclure le sqlite_master table dans votre requête.
Exemple :
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Résultat :
Products TempProducts
Si vous souhaitez inclure des vues, procédez comme suit :
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
Résultat :
Products TempProducts vProducts