Java 在Oracle clob上使用union\MENU时发生问题

Java 在Oracle clob上使用union\MENU时发生问题,java,sql,oracle,jdbc,oracle11g,Java,Sql,Oracle,Jdbc,Oracle11g,我有一个名为“preference”的表,在oracle中包含100多列,我编写了一个有点复杂的SQL,需要使用关键字UNION/INTERSECT/MINUS来进行查询。 举一个简单的例子: select a.* from preference a where a.id = ? union select a.* from preference a where a.id = ? 由于按需无限长字符串存储,业务维护已发生变化。需要将一列重新定义为Clob类型。Oracle不允许clob类型上

我有一个名为“preference”的表,在oracle中包含100多列,我编写了一个有点复杂的SQL,需要使用关键字UNION/INTERSECT/MINUS来进行查询。 举一个简单的例子:

 select a.* from preference a where a.id = ? union
 select a.* from preference a where a.id = ?
由于按需无限长字符串存储,业务维护已发生变化。需要将一列重新定义为Clob类型。Oracle不允许clob类型上的union,因此理想情况下,此处不能使用a.*

我将SQL更改为如下所示:

 select a.a,a.b,a.c... from preference a where a.id = ? union
 select a.a,a.b,a.c... from preference a where a.id = ?
它列出了除clob之外的所有列,然后我必须做另一个选择以将clob值附加在一起。这是个好主意吗


上述案例带来的另一个问题是:正如我提到的,这个表有很多列,列出sql中的所有列,这会使sql更长。是否有一个表达式我可以选择所有列,但不选择特定列

Oracle在使用日志进行delaing时不允许使用union/MENUS,但允许union all,您可以使用union all重写查询并使用select。在select子句中,可以发出select a。或者列出每一列

在阅读了您的问题之后,我主要关心的是Java上的内存使用情况,您是否使用orm加载数据?或者您正在使用JDBCAPI

如果将所有CLOB加载到某些字符串中,则可能以OutOfMemoryError结束。我的建议是只为需要向用户显示的行(或必须处理clob字段的行)加载clob


你能更深入地了解你的应用程序(它必须处理的行数)和你的数据(特别是clob大小)吗?

Oracle当使用日志进行数据挖掘时,不允许使用union/减号,但允许union all,你可以使用union all和select重写查询。在select子句中,可以发出select a。或者列出每一列

在阅读了您的问题之后,我主要关心的是Java上的内存使用情况,您是否使用orm加载数据?或者您正在使用JDBCAPI

如果将所有CLOB加载到某些字符串中,则可能以OutOfMemoryError结束。我的建议是只为需要向用户显示的行(或必须处理clob字段的行)加载clob


您能否更深入地了解您的应用程序(它必须处理的行数)和数据(尤其是clob大小)?

感谢您的回复,我正在使用JDBC与oracle交谈,clob没有那么大(一般小于10000字节),出于系统性能考虑,我们正在将经常使用的数据加载到内存中。这个例子不是真实的例子,所以我必须在这个SQL条件下使用UNION/INTERSECT/MENUS。我现在担心的是SQL非常长,因为它列出了每一列,这会影响oracle的执行性能吗?是否有任何SQL语言我可以选择所有列,除了解释一个感谢您的回复,我正在使用JDBC与oracle对话,clob没有那么大(一般小于10000字节),出于系统性能考虑,我们正在将常用数据加载到内存中。这个例子不是真实的例子,所以我必须在这个SQL条件下使用UNION/INTERSECT/MENUS。我现在担心的是SQL非常长,因为它列出了每一列,这会影响oracle的执行性能吗?是否有任何SQL语言我可以选择除一列以外的所有列