我有一个 PL/SQL 函数可以从 MySQL 复制 GROUP_CONCAT()。该函数接受一个 CURSOR 并返回一个 VARCHAR2。但是,我的应用程序中有一些对象有足够的数据,连接字符串的大小大于 4000。由于我在 SELECT 语句(而不仅仅是 PL/SQL)中使用了这个函数,这让 Oracle 很生气并抛出了 ORA -06502。
因此,我更改了函数以返回 CLOB。这可以解决错误,但是当使用 JDBC 读取数据时,性能会受到很大影响。我正在读取大量数据并从 VARCHAR2 切换到 CLOB 导致执行时间减慢 10-20 倍。我一直在考虑以某种方式对此进行优化,但是由于 CLOB 是从函数返回的并且不在表中,所以我读过的大部分内容都不适用。
有什么办法可以改善这一点吗?我想强调的是,这与实际数据库的性能没有任何关系。连接最多 4000 个字符的值非常快,只有少数对象需要超过 4000 个字符,最大的值在 5000 个字符左右。LOB 通常针对大型原始数据进行优化,如果不是因为 Oracle 对 SELECT 语句中存在的列的大小限制,我不需要这样做。
编辑- 我想重申 CLOB 是在函数中创建的,它没有读取数据库中的任何 CLOB。它只是连接 VARCHAR2 并将结果作为 CLOB 返回。