5

我正在尝试使用 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

我究竟做错了什么?我的脚本有问题吗?另外,为什么没有“;” 我的陈述结束时的终结者?

谢谢,

4

5 回答 5

4

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

脚本使用分号 (;) 来终止每个 SQL 命令。如果您使用 DB2 命令行处理器,您应该记住使用“-t”标志。
...
如果不使用 -t 标志,则
在运行 db2ct32.sql 脚本时会出现如下错误:
create table “ACCOUNTS” (
DB21034E 该命令被作为 SQL 语句处理,因为它不是
有效的命令行处理器命令。在 SQL 处理期间它返回:
SQL0104N 在“吃表”帐户“之后发现了一个意外的标记“(”。
预期的标记可能包括:“END-OF-STATEMENT”。SQLSTATE=42601

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

db2 -tf "pathtofile"

还与

db2 -tvf "pathtofile"

你可能会得到更多的诊断。
不要将专有软件推到极限,它们并没有那么宽。

于 2009-02-20T05:43:37.467 回答
2

姓名行后面有一个逗号

改变:

NAME VARCHAR(20) NOT NULL,

到:

NAME VARCHAR(20) NOT NULL
于 2009-02-20T04:27:10.897 回答
1

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

SQL0104N  An unexpected token "/" was found following "BEGIN-OF-STATEMENT".  
Expected tokens may include:  "<values>".  SQLSTATE=42601
于 2009-02-20T06:01:24.663 回答
0

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

于 2009-02-20T05:10:19.030 回答
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

于 2016-11-11T14:21:27.513 回答