hsqldb 是不是支持 oracle 兼容模式下的表别名

Posted

技术标签:

【中文标题】hsqldb 是不是支持 oracle 兼容模式下的表别名【英文标题】:Does hsqldb support table alias in oracle compatible modehsqldb 是否支持 oracle 兼容模式下的表别名 【发布时间】:2013-03-19 15:21:10 【问题描述】:

我们在 dao 测试中使用 hsqdb-2.2.9。 hsqldb 通过设置SET DATABASE SQL SYNTAX ORA TRUE; 与oracle(生产中)兼容,我们使用ibatis sql map。

当 sql 包含表别名时,它会失败,例如 select a.name, b.code form t_a a, t_b b where a.id = b.a_id ,它会报告 unexpected token a。我们尝试在表和表别名之间添加“as”,它也不起作用。我错过了什么吗?

【问题讨论】:

form 应该是 from 【参考方案1】:

是的,HSQLDB 支持表别名。

如果您使用您报告的确切查询,您会得到:

 unexpected token: T_A 

如果您按照 a_horse_with_no_name 的注释更正查询,它应该可以工作。如果其中一张表不存在,您会得到:

  user lacks privilege or object not found: T_A 

顺便说一句,尝试使用最新的 2.3.0 快照 jar 以获得更好的 Oracle 兼容性测试。您可以从网站的支持页面找到它。

【讨论】:

感谢您的回复,我更正了sql并得到'用户缺少权限或找不到对象:'但是表确实存在,还有其他可能吗? @fredt【参考方案2】:

呃……我想我已经找到了问题…………我自己的。我突然想到我使用'do'(表名是t_delivery_order)作为表别名,它恰好是hsqldb(或sql)中的关键字。只需将 'do' 替换为 'd',它是固定的。谢谢大家

【讨论】:

以上是关于hsqldb 是不是支持 oracle 兼容模式下的表别名的主要内容,如果未能解决你的问题,请参考以下文章

Derby 或 HSQLDB 是不是支持跨模式连接的 Sybase 语法?

数据库 Hsqldb 无法区分日期和时间戳

HSQLDB与postgres的兼容性问题

hsqldb 是不是提供类似于 Oracle CURSOR 的功能?

Hsqldb安装与使用

是否可以在 HSQLDB 中有虚拟列