尝试删除条目会出现:不一致的数据类型:Oracle 中预期 %s 得到 %s”

问题描述 投票:0回答:1

我正在尝试删除一些基于“名称”的条目。我有一个包含不同列的表 t1,其中一列是名称,类型为 NCLOB。 我有一种方法可以在 Java 中删除这些条目,并且我正在使用命名查询。我的问题是,如何解决 NCLOB 问题以便能够删除数据。我不想更改列类型。 名称查询如下所示:

"DELETE FROM table1 t1 WHERE t1.name = :name"
我该如何解决这个问题?

java oracle named-query nclob
1个回答
0
投票

您不能将等式谓词应用于任何类型的 LOB。相反,要么取出子串并转换

nvarchar2
并将谓词应用于它,或者使用
dbms_lob.compare
:

delete from table1 t1 where dbms_lob.compare(t1.name,:name) = 0

delete from table1 t1 WHERE CAST(SUBSTR(t1.name,1,2000) AS nvarchar2(2000)) = :name

虽然这可行,但它提出了一个更重要的问题:为什么要对标识符列使用 LOB 数据类型。您发现自己这样做的事实表明 LOB 是不适合您需求的数据类型。上面的 DML 可以工作,但性能不佳。 LOB 适用于非结构化数据,这些数据不应包含具有编程意义的信息。

© www.soinside.com 2019 - 2024. All rights reserved.