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

Storing data from database in a CLOB object using EXECUTE IMMEDIATE BULK COLLECT INTO

我正在尝试编写一个过程,用数据库中的特定数据填充 CLOB 对象。

我有一个 SQL select 查询存储在 table 中。我正在获取该查询并在过程中执行它以获取一列数据(供应商 ID)。 我将查询存储在数据库中的原因是它经常更改,但它会提供与其结果相同的列。 现在我试图将这些数据放入 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;

问候 尼尔玛利亚

我在您的代码中看到的主要问题是您试图将 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;