Что в ошибке в этом операторе SQLite? - PullRequest
0 голосов
/ 20 февраля 2020

Я получил эту ошибку: SQL error (near "(": syntax error)

create table IF NOT EXISTS demo
(
    code varchar(200) default substr(lower(hex(randomblob(32))),1,6) not null primary key
);

Что не так с моим кодом?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2020

Если вы используете DEFAULT с выражением вместо литерального значения, оно должно быть заключено в скобки.

DEFAULT (substr(...))

С документация :

Предложение DEFAULT задает значение по умолчанию, которое будет использоваться для столбца, если пользователь не указал явно значение при выполнении INSERT. Если к определению столбца не добавлено явное предложение DEFAULT, значением по умолчанию для этого столбца является NULL. Явное предложение DEFAULT может указывать, что значением по умолчанию является NULL, строковая константа, константа BLOB-объекта, число со знаком, или любое выражение константы, заключенное в скобки . Значением по умолчанию также может быть одно из специальных независимых от регистра ключевых слов CURRENT_TIME, CURRENT_DATE или CURRENT_TIMESTAMP. В целях предложения DEFAULT выражение считается константой, если оно не содержит подзапросов, ссылок на столбцы или таблицы, связанных параметров или строковых литералов, заключенных в двойные кавычки вместо одинарных кавычек.

0 голосов
/ 20 февраля 2020

Попробуйте установить ненулевое значение перед установкой значения по умолчанию:

create table IF NOT EXISTS demo ( code varchar(200) primary key not null default substr(lower(hex(randomblob(32))),1,6)   );
...