我是Oracle的新手。在SQLite,PostgreSQL或MSSQL中,我可以执行以下查询:
SELECT * FROM users ORDER BY id, email
以下是USERS的定义:
CREATE TABLE "USERS" (
"ID" NUMBER(38,0) NOT NULL,
"EMAIL" VARCHAR2(255)
)
ID为NUMBER类型,电子邮件为VARCHAR类型。
当我在Oracle中运行上述SELECT查询时,它将引发错误:
ORA-00932: inconsistent datatypes: expected - got CLOB
有没有在Oracle中这样做?
感谢您的关注。
答案 0 :(得分:2)
好像email
字段是CLOB
而不是VARCHAR
。你不能ORDER BY
CLOB
。
如果您的专栏是CLOB
,那么您可以通过CAST()
字段排序:
select *
from users
order by id, cast(email as varchar2(50)) -- or whatever length you want.
答案 1 :(得分:0)
仔细检查email
列的实际类型。它似乎只是CLOB,不适用于订单。
显然,不需要存储超过4000个字符的电子邮件。
所以CLOB应该用VARCHAR2(255)替换。
请参阅What is the maximum length of a valid email address?。
ORM中的Oracle类型映射可能存在一些问题。
答案 2 :(得分:0)
尝试使用柱位置 - (这意味着你不应该使用* - 无论如何我会推荐......)
select id, email from users order by 1,2
还应该可以通过CLOB的第一部分通过在by order by子句中应用一些字符串连接函数来进行排序。