Ошибка Sql при создании таблиц — Firebird

#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:

  1. В Firebird нет VARCHAR2 типа — https://firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-datatypes-chartypes.html
  2. Если вы хотите выполнить две команды — вам нужно выполнить ДВЕ команды. Вы пытаетесь выполнить две команды в одной, но это не способ сделать это. Вы должны разделить их и запускать одну за другой. Или вам нужно объединить их в одну EXECUTE BLOCK команду.
  3. Также 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 )
)