在where子句中使用Oracle保留字或关键字



我需要在Oracle数据库上编写一个查询,其中一个字段被称为ACCOUNTACCOUNT在保留列表上http://docs.oracle.com/cd/B19306_01/em.102/b40103/app_oracle_reserved_words.htm我的查询失败了。

在这个DB中,ACCOUNTVARCHAR2,我不能更改它的名称或任何东西的结构,我只能运行SELECT查询。

虽然ACCOUNTVARCHAR2,但它总是包含一个整数,我想得到一个值范围。

我以为这会奏效:

SELECT *
FROM TABLE 
WHERE TO_NUMBER(ACCOUNT) > 1000
AND TO_NUMBER(ACCOUNT) < 2000

但我刚刚收到一个ORA-01722无效号码错误。

我已经检查过ACCOUNT只包含整数,并且使用非保留关键字运行此查询效果良好。。。

您可以使用类似的"双引号来转义保留字

SELECT *
FROM TABLE 
WHERE TO_NUMBER("ACCOUNT") > 1000
AND TO_NUMBER("ACCOUNT") < 2000

(OR(更好地使用类似的BETWEEN结构

SELECT *
FROM TABLE 
WHERE TO_NUMBER("ACCOUNT") BETWEEN  1001 AND 1999

如果您的表名真的是TABLE;你也需要逃避,因为这也是一个保留词。

我调查了您的问题,并能够复制

此错误ORA-01722无效号码错误。发生这种情况是因为您的sql试图转换类似的内容

To_NUMBER('OMETEXT'(>一些数字

因此,当您的sql将其转换为_number(‘somenumber as a varchar2’(时,它会遇到(‘sometext varchar2(

示例

选择*来自表,待定其中TO_NUMBER("helloworld"(>1000

这将抛出那个错误。检查列的数据,在数据的某个地方,一行或多行中有一些文本。

您是否尝试向表添加别名

SELECT *
FROM TABLE  as tbl
WHERE TO_NUMBER(tbl.ACCOUNT) > 1000
AND TO_NUMBER(tbl.ACCOUNT) < 2000