Хранение данных из базы данных в объекте CLOB с помощью EXECUTE IMMEDIATE BULK COLLECT INTO

Я пытаюсь написать процедуру, которая будет заполнять объект CLOB определенными данными из базы данных.

У меня есть запрос выбора SQL хранится в таблице. Я извлекаю этот запрос и выполняю его в процедуре, чтобы получить столбец данных (идентификатор поставщика). Причина, по которой я храню запрос в БД, заключается в том, что он может часто изменяться, но будет содержать тот же столбец, что и его результат. Теперь я пытаюсь поместить эти данные в объект CLOB, и вот где я застрял. Я не могу получить идентификаторы поставщиков из v_report_type в объекте CLOB.

Может кто-нибудь, пожалуйста, направьте меня, чтобы написать правильный код.

Ниже приведен фрагмент того, что я написал в процедуре.

DECLARE

TYPE report_type IS TABLE OF supplier.supplier_id%TYPE
v_report_type report_type;

v_query1 varchar(4000);

v_report_clob CLOB;


BEGIN

v_report_clob:= null;

select query1 into v_query1 from report_query where report_id = 20;

EXECUTE IMMEDIATE v_query1 BULK COLLECT INTO v_report_type;


v_report_clob := v_report_clob||v_report_type;


//Unrelated code here

END;

С уважением, Нирмаля

1 ответ

Решение

Основная проблема, которую я вижу в вашем коде, заключается в том, что вы пытаетесь объединить CLOB с типом данных коллекции. Вы можете попробовать заменить строку на конкатенацию:

v_report_clob := v_report_clob || v_report_type(1); --always take only first value

или же

FOR i IN 1..v_report_type.COUNT LOOP
  v_report_clob := v_report_clob || v_report_type(i); --concatenate all values into single CLOB, here you can add also e.g. extra spaces between values
END LOOP;
Другие вопросы по тегам