为什么我收到此SQL / DB错误?

时间:2009-02-20 04:17:26

标签: sql db2

我正在尝试使用DB2运行一个简单的SQL语句,并且遇到了一些问题。 我想在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 个答案:

答案 0 :(得分:3)

可能这会有所帮助,
http://www.uc.edu/R/r25/documentation/Version3.2/install_instructions.pdf

  

脚本使用分号(;)来终止每个SQL   命令。如果使用DB2命令行处理器,   你应该记得使用“-t”标志   ...
  如果不使用-t标志,则会出现诸如
的错误   在运行db2ct32.sql脚本之后:
  创建表“ACCOUNTS”(
  DB21034E该命令作为SQL语句处理,因为它不是一个
  有效的命令行处理器命令。在SQL处理期间,它返回:
  SQL0104N意外的令牌“(”在“ate table”ACCOUNTS“”后面找到。“   预期的代币可能包括:“结束陈述”。 SQLSTATE = 42601

所以,我会添加分号并使用-t开关调用它代表的任何废话 我查看了样本,他们使用类似

的内容
db2 -tf "pathtofile"

还有

db2 -tvf "pathtofile"

您可能会获得更多诊断信息 不要将专有软推到极限,它们不是那么宽。

答案 1 :(得分:0)

名称行后面有逗号

变化:

NAME VARCHAR(20) NOT NULL,

为:

NAME VARCHAR(20) NOT NULL

答案 2 :(得分:0)

我会在CREATE TABLE PERSONS和()之间插入空格或行分隔符 为了安全起见。

答案 3 :(得分:0)

如果我包含分号并使用-t标志,我会得到:

SQL0104N  An unexpected token "/" was found following "BEGIN-OF-STATEMENT".  
Expected tokens may include:  "<values>".  SQLSTATE=42601

答案 4 :(得分:0)

以下不带空格的语法在命令行上正常工作,

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