gpt4 book ai didi

java - PL/SQL 返回 CLOB 和 JDBC 性能

转载 作者:行者123 更新时间:2023-11-29 09:11:34 25 4
gpt4 key购买 nike

我有一个 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 返回。

最佳答案

我不知道如何解决您的问题..但是最小化您的问题的一种方法是拥有您的功能的 2 个版本。1 个返回 varchar2 和一个返回 clob

如果值超过 4000/32000 个字符,您的 varchar2 版本可能会在内部使用 clob 版本并返回异常代码/引发错误

然后您的 Java 代码可以检测到这一点,并为少数需要它的情况直接重新调用 clob 版本。

关于java - PL/SQL 返回 CLOB 和 JDBC 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com