Eclipse Link在我们的RCP应用程序中的持久化类中创建一个查询,如下所示:
select column1, column2, ..., version from table_name
使用这样的选择,我们得到错误' ORA-00942',说表或视图不存在。我们正在使用Oracle 11g数据库。相同的语句与JDBC连接(不使用Eclipse Link)一起使用没有问题。同样在SQLPlus中,该语句有效。我们检查了访问权限,确保在我们的所有测试中拥有相同的用户,数据库等。 我们试图在持久化类中设置列版本的注释以使用双引号:
@Column(name="\"VERSION\"", nullable=false, precision=22)
private BigDecimal version;
之后它起作用了。所有其他列,也是表名,都没有引号。只是这个专栏'版本'需要报价,为什么。专栏版本'是DDL脚本的一部分,它没有使用任何双引号。所有列名都是大写的。表名相同。
在SQLDeveloper中,'版本'被标记为关键字。但我无法解释如何使用' version'因为列名可能会对SQL语句产生影响。
有人知道关键字'版本'可能会对Eclipse Link或Oracle中的查询产生影响吗?
答案 0 :(得分:0)
关于Oracle:
select * from V$RESERVED_WORDS where keyword = 'VERSION';
KEYWORD LENGTH RESERVED RES_TYPE RES_ATTR RES_SEMI DUPLICATE
-------------------- ---------- -------- -------- -------- -------- ---------
VERSION 7 N N N N N
此查询检查' VERSION'是一个关键字(您可能需要一些特殊权限才能从此视图中进行选择)
以下是对此观点的描述:
https://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2048.htm#REFRN30204
Column Datatype Description
KEYWORD VARCHAR2(30) Name of the keyword
LENGTH NUMBER Length of the keyword
RESERVED VARCHAR2(1) A value of Y means that the keyword cannot be used as an identifier. A value of N means that it is not reserved.
RES_TYPE VARCHAR2(1) A value of Y means that the keyword cannot be used as a type name. A value of N means that it is not reserved.
RES_ATTR VARCHAR2(1) A value of Y means that the keyword cannot be used as an attribute name. A value of N means that it is not reserved.
RES_SEMI VARCHAR2(1) A value of Y means that the keyword is not allowed as an identifier in certain situations, such as in DML. A value of N means that it is not reserved.
DUPLICATE VARCHAR2(1) A value of Y means that the keyword is a duplicate of another keyword. A value of N means that it is not a duplicate.
根据此信息,' VERSION'是一个关键字,但您可以将其用作标识符。