【问题标题】:Apache Derby Lexical Error on #-sign?#-sign 上的 Apache Derby 词法错误?
【发布时间】:2011-08-16 20:06:53
【问题描述】:

我正在以编程方式在 DB2 服务器和 Apache Derby (JavaDB) 服务器之间传输数据。

DB2 服务器有许多列名包含井号 (#) 字符的表。但是,当尝试在 Derby 中创建表时:

CREATE TABLE LIBNAME.TABNAME  
(COL# decimal(3,0),  
REC# decimal(5,0),  
DESC char(30,0),  
SDSC char(10,0));

我收到以下错误:

ERROR 42X02:第 1 行第 38 列出现词法错误。遇到:“#”(35),在:“”之后

Derby Reference Manual 无济于事;错误代码 42X02 的给定解释只是 <value>

从 Derby 的列名中删除井号然后为 DB2 重新添加它是一项简单的任务,但如果可以的话,我想避免它。

是否有人碰巧知道 Derby 是否根本不允许使用 # 字符(为什么?)或者我做错了什么...

【问题讨论】:

    标签: java sql db2 derby


    【解决方案1】:

    根据 Derby 参考手册 (Rules for SQL92 Identifiers):

    普通标识符是不被双引号括起来的标识符。分隔标识符是用双引号括起来的标识符。

    普通标识符必须以字母开头,并且只能包含字母、下划线字符 (_) 和数字。允许的字母和数字包括所有 Unicode 字母和数字,但 Derby 不会尝试确保标识符中的字符在数据库的语言环境中有效。

    分隔标识符可以包含双引号内的任何字符。封闭的双引号不是标识符的一部分;它们只是用来标记它的开始和结束。分隔标识符末尾的空格无关紧要(截断)。 Derby 将分隔标识符内的两个连续双引号翻译为一个双引号——也就是说,“翻译的”双引号变成分隔标识符中的一个字符。

    因此,由于#COL# 作为普通标识符似乎是无效的。 "COL#" 作为分隔标识符可能是有效的,但我还没有测试过。

    【讨论】:

    • 酷,这回答了我的问题。谢谢!
    • @Luke Woodward 链接已损坏。是否有其他信息链接?
    • @verystrongjoe:奇怪,几分钟前我尝试了它,但它重定向到另一个 URL。我已经更新了链接以指向我被重定向到的 URL,所以希望它现在应该可以工作了。
    • @LukeWoodward 谢谢。有用。你可以帮帮我吗? stackoverflow.com/questions/30637137/…我觉得你好像是德比高手。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2021-04-12
    • 2012-09-21
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多