Неожиданный токен «BIGINT» при создании базы данных (DB2 LUW)

Это простая команда sql, которую я хочу запустить:

CREATE TABLE USERMNGR.AUTHORIZED_CLIENT (
    ID BIGINT  (8) DEFAULT J NOT NULL,
    AUTHORIZED_CLIENT_STATUS CHAR    (10) DEFAULT 'Y',
    CLIENT_NAME VARCHAR (40) DEFAULT 'N' NOT NULL,
    NATIONAL_CODE CHAR    (16) DEFAULT 'N' NOT NULL,
    PRIMARY KEY (ID)
);

Там есть пробелы, но я не думаю, что они создают какие-либо проблемы. Запуск сценария с использованием IBM Data Studio, DBeaver и CLI DB2 выдаст следующую ошибку:

SQL Error [42601]: An unexpected token "BIGINT" was found following "ORIZED_CLIENT ( 
 ID".  Expected tokens may include:  "BINARY".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.33.31

Я не могу найти, в чем проблема. Я создал базу данных USERMNGR вручную перед запуском сценария и знаю, что BIGINT поддерживается DB2. Каждая ошибка unexpected token, которую я нашел в Интернете, имела какую-то проблему, которой нет у этой команды. Это просто CREATE TABLE. Я даже удалил предыдущий USERMNGR., и это ничего не изменило. Я изменил тип данных BIGINT на INTERGER, и у меня возникла еще одна ошибка:

CREATE TABLE USERMNGR.AUTHORIZED_CLIENT (
    ID INTEGER  (8) DEFAULT J NOT NULL,
    AUTHORIZED_CLIENT_STATUS CHAR    (10) DEFAULT 'Y',
    CLIENT_NAME VARCHAR (40) DEFAULT 'N' NOT NULL,
    NATIONAL_CODE CHAR    (16) DEFAULT 'N' NOT NULL,
    PRIMARY KEY (ID)
);
SQL Error [42601]: An unexpected token "(" was found following "LIENT ( 
 ID INTEGER".  Expected tokens may include:  "CHECK".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.33.31

И еще одна попытка:

CREATE TABLE USERMNGR.AUTHORIZED_CLIENT (
    ID INTEGER DEFAULT J NOT NULL,
    AUTHORIZED_CLIENT_STATUS CHAR    (10) DEFAULT 'Y',
    CLIENT_NAME VARCHAR (40) DEFAULT 'N' NOT NULL,
    NATIONAL_CODE CHAR    (16) DEFAULT 'N' NOT NULL,
    PRIMARY KEY (ID)
);

И ошибка:

SQL Error [42601]: An unexpected token "NOT" was found following "D INTEGER  DEFAULT J".  Expected tokens may include:  "<references_spec>".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.33.31

Я новичок в DB2, знаю больше о sql, но я там тоже не профессионал. Я делаю здесь что-то не так? Заранее спасибо.

Я удалил (8) DEFAULT J из объявления ID, и таблица была создана. Однако эта команда была сгенерирована с помощью razorsql из другой базы данных DB2 и не писалась вручную. Кроме того, есть еще много таблиц и команд (основной скрипт занимает 80 МБ), и я не могу редактировать все это вручную.

III_phr 09.04.2024 10:24

Похоже на проблему с razorsql.

jarlh 09.04.2024 10:36

@jarlh для платного продукта, такие ошибки выглядят не очень профессионально. Значит, эта команда на 100% синтаксически неверна? Если да, то мне придется использовать DB2 Data Studio или DBeaver для создания сценариев.

III_phr 09.04.2024 10:43

@lll_phr: Я бы рекомендовал уведомить создателя «RazorSQL» об этих проблемах, чтобы он мог исправить их в своем инструменте и чтобы другие могли извлечь выгоду из ошибок, исправленных в будущем.

marc_s 09.04.2024 11:15

@marc_s Конечно, спасибо за рекомендацию! Мне просто нужно протестировать его с помощью других инструментов и убедиться, что проблема в RazorSQL, а не в данных или конфигурации базы данных. После этого я как можно скорее сообщу об ошибке :D

III_phr 09.04.2024 15:46

Итак, в конце концов я не был уверен, сделал ли я что-то не так или RazorSQL сделал что-то не так. Я заметил, что база данных, для которой я создавал сценарий, имела другой драйвер, чем тот, на котором я выполнял сценарий. Мне не удалось найти точный драйвер (наша группа имеет к нему ограниченный доступ), но я смог подключиться к нему с помощью старого драйвера DBeaver и LUW (вероятно, версии 8 и ниже). Я столкнулся с некоторыми другими проблемами, связанными с другой версией драйверов, но мне удалось сделать то, что я хотел.

III_phr 17.04.2024 07:58
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
6
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы столкнулись с некоторыми проблемами синтаксиса при попытке создать таблицу в базе данных DB2. Посмотрим, сможем ли мы это исправить!

CREATE TABLE USERMNGR.AUTHORIZED_CLIENT (
    ID BIGINT DEFAULT 0 NOT NULL,
    AUTHORIZED_CLIENT_STATUS CHAR(10) DEFAULT 'Y',
    CLIENT_NAME VARCHAR(40) DEFAULT 'N' NOT NULL,
    NATIONAL_CODE CHAR(16) DEFAULT 'N' NOT NULL,
    PRIMARY KEY (ID)
);

В этом исправленном ответе:

Указание размера для BIGINT я удалила, за ненадобностью.

Попробуйте, и посмотрим, сработает ли это. Я не совсем уверен, решит ли это проблему, но попробовать стоит.

Да, это решило проблему, спасибо :D. Однако я создал этот сценарий с помощью RazorSQL и не писал его вручную. В этом скрипте все типы данных BIGINT имеют спецификацию размера (и значение по умолчанию, не являющееся числом). Я думаю, что эти инструменты не могут создавать синтаксически неправильные сценарии.

III_phr 09.04.2024 10:40

Другие вопросы по теме

Похожие вопросы

Получите выходные данные неудачного оператора обновления
Как объединить две таблицы в MySQL, используя определенные столбцы?
Объединение финансовых операций в ежемесячные балансы
БОЛЬШОЙ SQL для начинающих
Сортировка с использованием пути иерархического соединения Oracle SQL без увеличения количества строк
Проблема с динамическим предложением IN
Можем ли мы создать материализованное представление из стандартного представления в bigquery?
Проблема с группировкой и ранжированием: на основе показанной таблицы скрипт или хранимая процедура должны возвращать рейтинг на основе предоставленных правил
Отфильтровать последнее сообщение пользователя независимо от того, находится ли оно у отправителя или получателя, по идентификатору элемента
ВЫБРАТЬ из двух таблиц, СОЕДИНИТЬСЯ без связи, повторяя значение в одном или другом столбце