Я создал функцию
CREATE FUNCTION TEMP_ADAM_FUNC RETURN VARCHAR2 IS
BEGIN
RETURN 'TEST';
END;
И я запросил ее следующим образом:
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT TEMP_ADAM_FUNC FROM DUAL");
results.next();
results.getString(1);
После запуска этого через отладчик, вы можете видеть, что драйвер выделил значительную суммупамяти:

Фактически драйвер выделил 65535 символов для столбца VARCHAR2
.
Я выполнил другой запрос:
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery("SELECT DUMMY FROM DUAL");
results.next();
results.getString(1);
Я подтвердил размер столбца DUMMY
, используя этот запрос:
SELECT
DATA_TYPE,
DATA_LENGTH
FROM
ALL_TAB_COLUMNS
WHERE
TABLE_NAME = 'DUAL' AND COLUMN_NAME = 'DUMMY'
Этот запрос дал 'VARCHAR2'
и 1
соответственно.
Однако в этом случае драйвер выделил 4096 символов:

Яне совсем уверен, что управляет этой логикой.