Как использовать DISTINCT на больших CLOB - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь найти способ использовать DISTINCT для внутреннего SELECT, который читает CLOB . Перед применением DISTINCT я конвертирую CLOB в to_char, по-видимому, в БД есть записи, которые go значительно превышают количество символов в 10.000, поэтому я использую substr, чтобы ограничить их максимумом 4000 символы. Смысл использования DISTINCT в том, что в столбце, который я ищу, есть много дубликатов (я не могу удалить дубликаты заранее), и мне нужно получить максимум 1500 результатов, и для того, чтобы это работало, мне нужно сначала удалить дубликаты, а затем возьмите первые 1500 результатов . Ниже приведен запрос, который я использую. В этом случае я ищу любые результаты.

SELECT
    sub_synonym
FROM
    ( ( (
        SELECT DISTINCT
            to_char(substr(sub_synonym, 0, 4000)) AS sub_synonym
        FROM
            ingr,
            sub_ca
        WHERE
            ( ( ( ( ingr.id_d IN (
                SELECT
                    sub_ca.id_d
                FROM
                    sub_ca
                WHERE
                    sub_ca.sub_synonym LIKE '%'
            ) ) ) )
              AND ingr.id_d = sub_ca.id_d
              AND ingr.log_d = 0 )
    ) ) )
WHERE
    ROWNUM <= 1500;

При попытке получить следующее сообщение об ошибке: ORA-64203: Destination buffer too small to hold CLOB data after character set conversion.

Есть ли способ преодолеть это? Или как еще можно удалить дубликаты из ответа, прежде чем я получу первые 1500 результатов? (Я уже пробовал с group_by, но он не может работать с этим столбцом, очевидно).

...