我正在尝试使用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
我做错了什么?我的脚本有问题吗? 另外,为什么它没有“;”在我的陈述结束时终结者?
谢谢,
答案 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