我需要在Oracle数据库上写一个查询,其中一个字段的名称为ACCOUNT
。 ACCOUNT
在保留列表http://docs.oracle.com/cd/B19306_01/em.102/b40103/app_oracle_reserved_words.htm上,我的查询失败。在where子句中使用Oracle保留字或关键字
在此DB中,ACCOUNT
是VARCHAR2
,我不能更改它的名称和结构,我只能运行SELECT
查询。
虽然ACCOUNT
是一个VARCHAR2
,它总是包含一个整数,我想获得一个值的范围。
我认为这会做的伎俩:
SELECT *
FROM TABLE
WHERE TO_NUMBER(ACCOUNT) > 1000
AND TO_NUMBER(ACCOUNT) < 2000
,但我只是得到一个ORA-01722无效号码错误。
我已经检查了ACCOUNT
只包含整数和运行这个查询与非保留关键字正常工作......
可能的重复[如何转义Oracle中的保留字?](http://stackoverflow.com/questions/1162381/how-do-i-escape-a-reserved-word-in-oracle) – Allan
我不明白这个问题,或者至少是接受的答案...帐户是一个保留字,但是这并不能阻止它被用作非引用标识符。 [SQL Fiddle](http://sqlfiddle.com/#!4/f41dc/1),而且还在10gR2实例上进行了双重检查,因为这是doc链接的用途。这与ORA-01722无关? –
另外有趣的是,'account'甚至不在[保留字列表]中(http://docs.oracle.com/cd/E18283_01/server.112/e17118/ap_keywd001。htm)in 11gR2;但它仍然在'v $ reserved_words';尽管11gR2和10gR2中所有的标志都设置为N,所以它并没有真正保留。所以,这是一个沼气标准的ORA-01722,为什么你不应该存储数字作为字符串问题。即使您已经检查过,“帐户”列中必须有一个非数字值。 –