使用EXECUTE IMMEDIATE BULK COLLECT INTO将数据从数据库存储在CLOB对象中

时间:2015-01-20 16:34:47

标签: sql oracle clob

我正在尝试编写一个过程,该过程将使用数据库中的某些数据填充CLOB对象。

我有一个存储在表中的SQL select查询。我正在获取该查询并在过程中执行它以获取一列数据(供应商ID)。 我将查询存储在DB中的原因是因为它经常更改,但它将提供与其结果相同的列。 现在我试图将这些数据放在CLOB对象中,这就是我被困住的地方。 我无法从CLOB对象中的v_report_type获取供应商ID。

有人可以指导我编写正确的代码。

以下是我在程序中写的内容。

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;

此致 Nirmalya

1 个答案:

答案 0 :(得分: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;