Como acontece com a maioria das coisas no SQLite, há mais de uma maneira de obter uma lista de tabelas temporárias em um banco de dados.
Aqui apresento duas maneiras de retornar tabelas temporárias no SQLite.
O comando .tables
Se você estiver familiarizado com o shell de linha de comando SQLite, provavelmente conhecerá o
.tables
comando ponto. Este comando lista todas as tabelas que correspondem a um determinado padrão (ou simplesmente todas as tabelas, se nenhum padrão for fornecido). Isso inclui tabelas temporárias. Exemplo:
CREATE TEMP TABLE TempProducts (id, name, price);
.tables
Resultado:
Products temp.TempProducts vProducts
Neste caso, tenho uma tabela permanente (
Products
), uma visualização (vProducts
) e uma tabela temporária (temp.TempProducts
). Assim, você pode ver que as tabelas temporárias e permanentes são retornadas. Se suas tabelas temporárias usarem uma convenção de nomenclatura fixa, como um prefixo reservado apenas para tabelas temporárias, você poderá usar a correspondência de padrões para recuperar apenas tabelas temporárias.
Exemplo:
.tables temp%
Resultado:
temp.TempProducts
No entanto, as convenções de nomenclatura só são boas desde que todos as sigam.
Se você não deseja que tabelas permanentes sejam retornadas em seus resultados, provavelmente é melhor consultar o sqlite_temp_master tabela (abaixo).
A tabela sqlite_temp_master
SQLite tem um sqlite_temp_master tabela que contém tabelas temporárias e seus índices e gatilhos. Esta tabela é visível apenas para o aplicativo que criou a tabela temporária.
Você pode consultar esta tabela assim:
SELECT name FROM sqlite_temp_master;
Resultado:
TempProducts
Neste exemplo eu só retorno o nome da tabela, mas fique à vontade para usar um asterisco (
*
) para retornar todas as colunas. Como mencionado, esta tabela não inclui tabelas permanentes. Se você precisar retornar tabelas temporárias e permanentes e não puder usar
.temp
, você pode incluir o sqlite_master tabela em sua consulta. Exemplo:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type='table'
ORDER BY name;
Resultado:
Products TempProducts
Se você quiser incluir visualizações, faça o seguinte:
SELECT name FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type in ('table', 'view')
ORDER BY name;
Resultado:
Products TempProducts vProducts