【问题标题】:Storing data from database in a CLOB object using EXECUTE IMMEDIATE BULK COLLECT INTO使用 EXECUTE IMMEDIATE BULK COLLECT INTO 将数据库中的数据存储在 CLOB 对象中
【发布时间】:2015-03-18 23:41:51
【问题描述】:

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

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

谁能指导我编写正确的代码。

下面是我在程序中写的sn-p。

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 看起来像什么 - 您希望列值只是连接在一起,还是以某种方式分隔? ID列的数据类型是什么?
  • 我在v_report_clob := v_report_clob||v_report_type;ORA-06550: line 17, column 15: PLS-00306: wrong number or types of arguments in call to '||' ORA-06550: line 17, column 1: PL/SQL: Statement ignored行中收到以下错误
  • @Alex Poole 主要目的是将CLOB插入另一个表中。我想查看一个低于另一个的供应商 ID。数据类型为varchar2(10)

标签: sql oracle clob


【解决方案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;

【讨论】:

  • 这个在 for 语句中进行了小的更正。非常感谢。 FOR i IN 1..v_report_type.COUNT LOOP v_report_clob := v_report_clob || v_report_type(i); END LOOP;
猜你喜欢
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多