-1

私は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型です。

上記の SELECT クエリを Oracle で実行すると、エラーが発生します。

ORA-00932: inconsistent datatypes: expected - got CLOB

Oracleでそれを行う方法はありますか?

ご関心をお寄せいただきありがとうございます。

4

3 に答える 3

2

emailフィールドは ではCLOBなく のようですVARCHARORDER BYすることはできませんCLOB

列が の場合、フィールドを次の基準で並べ替えるCLOBことができます。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列の実際のタイプを再確認してください。order byには適用できないCLOBのようです。

明らかに、4000 文字を超えるメールを保存する必要はありません。

したがって、CLOB は VARCHAR2(255) に置き換える必要があります。

有効な電子メール アドレスの最大長は? を参照してください。.

ORM の Oracle 型マッピングに問題がある可能性があります。

于 2012-09-26T11:59:46.570 に答える
0

列の位置でも試してみてください-(これは*を使用しないことを意味します-とにかくお勧めします...)

select id, email from users order by 1,2

また、order by 句で何らかの文字列連結関数を適用することにより、CLOB の最初の部分で並べ替えることができるはずです。

于 2012-09-26T12:01:29.867 に答える