Почему я получаю эту ошибку SQL / DB? - PullRequest
2 голосов
/ 20 февраля 2009

Я пытаюсь выполнить простой оператор SQL с DB2, и у меня возникло несколько проблем. Я хотел бы иметь один скрипт в файле txt / db2, и чтобы двигатель обрабатывал все команды

Вот скрипт:

CONNECT TO MYDB

CREATE TABLE PERSONS(
     PID SMALLINT NOT NULL,
     NAME VARCHAR(20) NOT NULL
)

TERMINATE

Когда я запускаю db2 -f / pathtofile, я получаю:

SQL0104N  An unexpected token "(" was found following "CREATE TABLE PERSONS".  
Expected tokens may include:  "END-OF-STATEMENT".  SQLSTATE=42601

Что я делаю не так? Что-то не так с моим сценарием? Кроме того, почему это работает без ";" терминаторы в конце моих заявлений?

Спасибо,

Ответы [ 5 ]

3 голосов
/ 20 февраля 2009

Может быть, это поможет,
http://www.uc.edu/R/r25/documentation/Version3.2/install_instructions.pdf:

Скрипты используют точку с запятой (;) для завершения каждого SQL команда. Если вы используете процессор командной строки DB2, Не забывайте использовать флаг «-t».
...
Если вы не используете флаг -t, вы получите такие ошибки, как
после запуска сценария db2ct32.sql:
создать таблицу «СЧЕТА» (
DB21034E Команда была обработана как оператор SQL, поскольку она не была
допустимая команда процессора командной строки. Во время обработки SQL он вернул:
SQL0104N Неожиданный токен «(« был найден после «съел таблицу« СЧЕТА »».
Ожидаемые токены могут включать: «КОНЕЦ ЗАЯВЛЕНИЯ». SQLSTATE = 42601

Итак, я бы добавил точки с запятой и вызывал с ключом -t любую ерунду, которую он обозначает.
Я посмотрел на образцы, они используют что-то вроде

db2 -tf "pathtofile"

Также с

db2 -tvf "pathtofile"

вы можете получить больше диагностики.
Не выдвигайте проприетарный софт до предела, они не такие широкие.

0 голосов
/ 11 ноября 2016

Следующий синтаксис без пробелов работает прямо в командной строке,

CREATE TABLE PERSONS (PID SMALLINT NOT NULL, NAME VARCHAR(20) NOT NULL)

форматирование файла с этим, а не стиль абзаца работал для моего назначения здесь - http://www.eecs.yorku.ca/course_archive/2016-17/F/3421/project/create/yrb-create.txt

0 голосов
/ 20 февраля 2009

Если я добавлю точку с запятой и использую флаг -t, я получу:

SQL0104N  An unexpected token "/" was found following "BEGIN-OF-STATEMENT".  
Expected tokens may include:  "<values>".  SQLSTATE=42601
0 голосов
/ 20 февраля 2009

Я бы вставил пробел или разделитель строк между CREATE TABLE PERSONS и (
просто чтобы быть в безопасности.

0 голосов
/ 20 февраля 2009

У вас есть запятая после имени строки

Изменение:

NAME VARCHAR(20) NOT NULL,

до:

NAME VARCHAR(20) NOT NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...