Использование TCL: синтаксическая ошибка Sqlite при создании таблицы во временной таблице памяти

используя tcl и sqlite3, я хотел бы создать временную таблицу в памяти. Попытка этого:

package require sqlite3
sqlite3 DB  [file normalize X:\memdbtest.db]

DB eval {
    ATTACH DATABASE ':memory:' AS memdb;
    CREATE TEMP TABLE memdb.values (val TEXT);
}

Выдает мне ошибку: рядом со «значениями»: синтаксическая ошибка. Я думаю, это связано с тем, что «значения» являются зарезервированным ключевым словом в sqlite. Изменение приведенного выше кода на:

    DB eval {
        ATTACH DATABASE ':memory:' AS memdb;
        CREATE TEMP TABLE memdb.things (val TEXT);
    }

выдает ошибку "имя временной таблицы должно быть неполным"

Но пропуская memdb. перед этим поместил бы новую таблицу в обычную базу данных на диске.... Что я здесь делаю не так?


person Lumpi    schedule 22.09.2018    source источник


Ответы (1)


Временные таблицы помещаются во временную базу данных (с именем temp). Хотя эта база данных хранится в файле на диске, файл фактически не записывается до тех пор, пока кэш не переполнится (поскольку временная база данных не обязана быть устойчивой в случае сбоя).

Если вы хотите поместить таблицу в другую базу данных, используйте не CREATE TEMP TABLE, а обычный CREATE TABLE.

CREATE TABLE things([...]);        -- creates the table in the DB "main"
CREATE TABLE memdb.things([...]);  -- creates the table in the specified DB
CREATE TEMP TABLE things([...]);   -- creates the table in the DB "temp"
CREATE TABLE temp.things([...]);   -- creates the table in the DB "temp"
person CL.    schedule 22.09.2018