-1

我是甲骨文的新手。在 SQLite、PostgreSQL 或 MSSQL 中,我可以执行以下查询:

SELECT * FROM users ORDER BY id, email

这是用户的定义:

CREATE TABLE "USERS" (
 "ID" NUMBER(38,0) NOT NULL,
 "EMAIL" VARCHAR2(255)
)

Id 是 NUMBER 类型,email 是 VARCHAR 类型。

当我在 Oracle 中运行上述 SELECT 查询时,它会引发错误:

ORA-00932: inconsistent datatypes: expected - got CLOB

无论如何在Oracle中可以做到这一点?

感谢您的关注。

4

3 回答 3

2

似乎该email字段是 aCLOB而不是 a VARCHAR。你不能ORDER BY一个CLOB.

如果您的列是 aCLOB那么您可以CAST()按以下方式排序字段:

select *
from users
order by id, cast(email as varchar2(50))  -- or whatever length you want.

请参阅带有演示的 SQL Fiddle

于 2012-09-26T12:02:34.383 回答
0

仔细检查email列的真实类型。它似乎只是 CLOB 不适用于 order by。

显然,不需要存储超过 4000 个字符的电子邮件。

所以 CLOB 应该用 VARCHAR2(255) 代替。

请参阅有效电子邮件地址的最大长度是多少?.

ORM 中的 Oracle 类型映射可能存在一些问题。

于 2012-09-26T11:59:46.570 回答
0

也可以尝试使用列位置 - (这意味着你不应该使用 * - 无论如何我都会推荐......)

select id, email from users order by 1,2

还应该可以通过在 eorder by 子句中应用一些字符串连接函数来按 CLOB 的第一部分进行排序。

于 2012-09-26T12:01:29.867 回答