我运行了这个查询:
Select * from users where user_id=20;
并得到此错误:
ORA-00997: illegal use of LONG datatype
00997. 00000 - "illegal use of LONG datatype"
*Cause:
*Action:
Error at Line: 6 Column: 37
我想知道为什么会发生这种情况以及对此的正确查询。
您已经创建了user_id
定义为long
数据类型的表。与 C/Java/等不同,long
在 Oracle 中不是数字类型:
LONG
列存储可变长度的字符串,最多包含 2 GB -1 或 231-1 字节。LONG
列具有VARCHAR2
列的许多特征。可以使用LONG
列来存储长文本字符串。
当 Oracle 尝试将字符串值隐式转换为数字以与数字 20 进行比较时,您会收到错误。虽然这适用于varchar2
列,但long
数据类型有很多限制 - 甚至不应该用于长字符串,这应该是 CLOB。
如果你的列包含数值,那么它应该声明为number
,并且对于 ID 列,可能number(38)
使其成为整数。