我有一个名为“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更长。有表达式,我可以选择所有列,但摆脱具体的一个?
答案 0 :(得分:1)
Oracle在使用日志进行delaing时不允许使用union / minus但允许union all,可能是您可以使用union all重写查询并使用select 。在select子句中,您可以发出select a。或列出每一列。
在阅读了您的问题之后,我主要担心的是Java上的内存使用情况,您使用orm加载数据吗?或者你在使用jdbc api?
如果要将所有clob加载到某些字符串中,则可能会以OutOfMemoryError结束。我的建议是只为你需要向用户显示的行(或者必须处理clob字段的行)加载clob。
您能否更多地了解您的应用程序(它必须处理的行数)和您的数据(特别是clob大小)?