#sql #firebird #ddl #sqldatatypes #ibexpert
#sql #firebird #ddl #sqldatatypes #ibexpert
Вопрос:
У меня есть простой sql-код для create table
, а затем add constraint
для него. Это выглядит так:
CREATE TABLE bills (
id INTEGER NOT NULL,
code VARCHAR2(25) NOT NULL,
dateOfGeneration DATE NOT NULL,
job_id INTEGER NOT NULL
);
ALTER TABLE bills ADD CONSTRAINT bills_pk PRIMARY KEY ( id,job_id );
Я использую IBExpert — client для Firebird. Когда я выполняю этот код, я получаю 2 ошибки:
Первая ошибка: — в коде VARCHAR2(25) NOT NULL
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 29.
(.
Вторая ошибка: — в коде ИЗМЕНИТЬ ТАБЛИЦУ …
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 8, column 1.
ALTER.
Первый, я думаю, потому, что я использую varchar2
вместо varchar
. Как насчет второй ошибки? Как это исправить?
Комментарии:
1. VARCHAR2? Действительно ли этот тип данных поддерживается Firebord?
2. я так и думал, но, похоже, это не так. varchar работает. как насчет alter table?
Ответ №1:
- В Firebird нет
VARCHAR2
типа — https://firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-datatypes-chartypes.html - Если вы хотите выполнить две команды — вам нужно выполнить ДВЕ команды. Вы пытаетесь выполнить две команды в одной, но это не способ сделать это. Вы должны разделить их и запускать одну за другой. Или вам нужно объединить их в одну
EXECUTE BLOCK
команду. - Также
IBExpert
имеет отдельное окноScript Executive
для запуска нескольких команд. Это неSQL Editor
то, что предназначено для выполнения ОДНОЙ команды, это отдельное окно в другом меню — https://www.ibexpert.net/ibe/pmwiki.php?n=Doc.ScriptExecutive
Команда создания таблицы описана здесь: https://firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-ddl-tbl.html
В основном то, что вы пытаетесь сделать, выглядит так, если сделать это одной командой:
CREATE TABLE bills (
id INTEGER NOT NULL,
code VARCHAR(25) NOT NULL,
dateOfGeneration DATE NOT NULL,
job_id INTEGER NOT NULL,
PRIMARY KEY ( id,job_id )
)
или, если вы настаиваете на именовании, тогда, возможно
CREATE TABLE bills (
id INTEGER NOT NULL,
code VARCHAR(25) NOT NULL,
dateOfGeneration DATE NOT NULL,
job_id INTEGER NOT NULL,
CONSTRAINT bills_pk PRIMARY KEY ( id,job_id )
)