Ошибка при создании таблиц - Firebird - PullRequest
1 голос
/ 08 апреля 2019

У меня есть простой 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 - клиент для Firebird. Когда я выполняю этот код, я получаю 2 ошибки:

Первая ошибка : - в код VARCHAR2 (25) NOT NULL

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 29.
(.

Вторая ошибка : - в коде ALTER TABLE ...

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 8, column 1.
ALTER.

Первое, что я думаю, это то, что я использую varchar2 вместо varchar. Как насчет второй ошибки? Как это исправить?

1 Ответ

4 голосов
/ 08 апреля 2019
  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 )
)
...