Это простая команда 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, но я там тоже не профессионал. Я делаю здесь что-то не так? Заранее спасибо.
Похоже на проблему с razorsql.
@jarlh для платного продукта, такие ошибки выглядят не очень профессионально. Значит, эта команда на 100% синтаксически неверна? Если да, то мне придется использовать DB2 Data Studio или DBeaver для создания сценариев.
@lll_phr: Я бы рекомендовал уведомить создателя «RazorSQL» об этих проблемах, чтобы он мог исправить их в своем инструменте и чтобы другие могли извлечь выгоду из ошибок, исправленных в будущем.
@marc_s Конечно, спасибо за рекомендацию! Мне просто нужно протестировать его с помощью других инструментов и убедиться, что проблема в RazorSQL, а не в данных или конфигурации базы данных. После этого я как можно скорее сообщу об ошибке :D
Итак, в конце концов я не был уверен, сделал ли я что-то не так или RazorSQL сделал что-то не так. Я заметил, что база данных, для которой я создавал сценарий, имела другой драйвер, чем тот, на котором я выполнял сценарий. Мне не удалось найти точный драйвер (наша группа имеет к нему ограниченный доступ), но я смог подключиться к нему с помощью старого драйвера DBeaver и LUW (вероятно, версии 8 и ниже). Я столкнулся с некоторыми другими проблемами, связанными с другой версией драйверов, но мне удалось сделать то, что я хотел.
Похоже, вы столкнулись с некоторыми проблемами синтаксиса при попытке создать таблицу в базе данных 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
имеют спецификацию размера (и значение по умолчанию, не являющееся числом). Я думаю, что эти инструменты не могут создавать синтаксически неправильные сценарии.
Я удалил
(8) DEFAULT J
из объявленияID
, и таблица была создана. Однако эта команда была сгенерирована с помощью razorsql из другой базы данных DB2 и не писалась вручную. Кроме того, есть еще много таблиц и команд (основной скрипт занимает 80 МБ), и я не могу редактировать все это вручную.