Хранение данных из базы данных в объекте 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;