Ce face PRAGMA table_info
SQLite nu are DESCRIBE ca MySQL. Structura unui tabel o afli cu PRAGMA table_info(tabel), care întoarce câte un rând pe coloană: cid (poziția, de la 0), name, type (tipul scris în CREATE TABLE), notnull, dflt_value și pk (poziția în cheia primară, 0 dacă nu face parte din ea).
PRAGMA table_xinfo arată în plus coloanele ascunse și coloanele generate, cu o coloană hidden (2 = generată virtual, 3 = generată stocat).
Fiecare pragma care întoarce date are și o formă de funcție-tabel: pragma_table_info('tabel'). Pe ea poți pune WHERE, JOIN sau ORDER BY, de exemplu ca să listezi coloanele tuturor tabelelor dintr-o bază.
Parametri
| Parametru | Descriere |
|---|---|
tabel |
Numele tabelului (sau al vederii). Opțional cu schema: main.produse. |
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE produse (
id INTEGER PRIMARY KEY,
nume TEXT NOT NULL,
pret REAL DEFAULT 0,
stoc INTEGER,
valoare REAL GENERATED ALWAYS AS (pret * stoc)
);
CREATE TABLE clienti (id INTEGER PRIMARY KEY, nume TEXT, oras TEXT DEFAULT 'Iași');
Exemplul 1: Coloanele unui tabel
Coloana generată valoare nu apare în table_info.
PRAGMA table_info(produse);
Rezultat
╭─────┬──────┬─────────┬─────────┬────────────┬────╮
│ cid │ name │ type │ notnull │ dflt_value │ pk │
╞═════╪══════╪═════════╪═════════╪════════════╪════╡
│ 0 │ id │ INTEGER │ 0 │ │ 1 │
│ 1 │ nume │ TEXT │ 1 │ │ 0 │
│ 2 │ pret │ REAL │ 0 │ 0 │ 0 │
│ 3 │ stoc │ INTEGER │ 0 │ │ 0 │
╰─────┴──────┴─────────┴─────────┴────────────┴────╯
Exemplul 2: Cu coloanele generate
table_xinfo include și coloana generată, marcată cu hidden = 2 (virtuală).
PRAGMA table_xinfo(produse);
Rezultat
╭─────┬─────────┬─────────┬─────────┬────────────┬────┬────────╮
│ cid │ name │ type │ notnull │ dflt_value │ pk │ hidden │
╞═════╪═════════╪═════════╪═════════╪════════════╪════╪════════╡
│ 0 │ id │ INTEGER │ 0 │ │ 1 │ 0 │
│ 1 │ nume │ TEXT │ 1 │ │ 0 │ 0 │
│ 2 │ pret │ REAL │ 0 │ 0 │ 0 │ 0 │
│ 3 │ stoc │ INTEGER │ 0 │ │ 0 │ 0 │
│ 4 │ valoare │ REAL │ 0 │ │ 0 │ 2 │
╰─────┴─────────┴─────────┴─────────┴────────────┴────┴────────╯
Exemplul 3: Coloanele tuturor tabelelor, cu SQL obișnuit
Funcția-tabel pragma_table_info() se poate lega cu sqlite_schema, tabelul care listează obiectele bazei.
SELECT t.name AS tabel, c.name AS coloana, c.type AS tip
FROM sqlite_schema t
JOIN pragma_table_info(t.name) c
WHERE t.type = 'table'
ORDER BY t.name, c.cid;
Rezultat
╭─────────┬─────────┬─────────╮
│ tabel │ coloana │ tip │
╞═════════╪═════════╪═════════╡
│ clienti │ id │ INTEGER │
│ clienti │ nume │ TEXT │
│ clienti │ oras │ TEXT │
│ produse │ id │ INTEGER │
│ produse │ nume │ TEXT │
│ produse │ pret │ REAL │
│ produse │ stoc │ INTEGER │
╰─────────┴─────────┴─────────╯
Greșeli frecvente
- Te bazezi pe coloana
typeca pe tipul real al datelor. Este doar textul declarat; într-un tabel care nu eSTRICT, coloana poate conține valori de alte tipuri. Tipul unei valori îl afli cutypeof(). - Scrii
PRAGMA table_info('produse')cu un nume greșit și nu primești nicio eroare: pentru un tabel inexistent, pragma întoarce zero rânduri.
Comenzi înrudite
.schema: Afișează instrucțiunile CREATE pentru tabelele, indexurile, vederile și declanșatorii din bază, exact cum au fost scrise..tables: Afișează numele tabelelor și vederilor din baza de date deschisă, eventual doar pe cele care se potrivesc cu un tipar LIKE.CREATE TABLE: Creează un tabel nou. În SQLite tipul coloanei este opțional și doar sugerează cum se salvează valorile.Afinitatea tipurilor și typeof(): În SQLite tipul aparține valorii, nu coloanei. Afinitatea coloanei doar încearcă să convertească valorile la inserare.Coloane generate (GENERATED ALWAYS AS): O coloană a cărei valoare este calculată automat dintr-o expresie peste celelalte coloane ale rândului, la citire sau la scriere.