使用 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;
我正在尝试编写一个过程,用数据库中的特定数据填充 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;