逐行读取clob变量

时间:2014-03-21 08:53:21

标签: sql oracle plsql clob

有一个值列表,我从shell获得输出。该列表每行包含一个“名称”,如下所示。它有超过300行,预计会更长。

BeforeArchive_Field
BeforeArchive_Reservoir
BeforeArchive_Well
BeforeArchive_Wellbore
BeforeArchive_WellboreCompletion
BeforeArchive_WellboreContactInterval
ba_organization_part0
ba_organization_part2

我需要将此列表传递给pl / sql过程,以便它可以解析它并操作每个单独的“名称”。由于列表的长度,我想到创建一个存储过程,它将此列表作为CLOB参数。

这两个问题是:

这是处理清单的最佳方式(格式)吗?

如果是这样,有没有一种直接解析这个clob地狱的方法?

我读过这篇文章 Reading clob line by line with pl\sql 回答但是在某些情况下,事情可能会变得不那么复杂。

我不熟悉这种LOB格式,并希望得到任何帮助。

1 个答案:

答案 0 :(得分:7)

对我来说似乎是一个好主意:使用clob调用存储过程一次,然后调用另一个专用于处理单行的proc可以在应用服务器和数据库服务器之间保存一些I / O.

我有一个非常简单的程序来逐行拆分clob:

create table test (c clob);

insert into test (c) values (
'azertyuiop
qsdfghjklm
wxcvbn
');

select to_char(regexp_substr(test.c, '.+', 1, level)) pattern
from test
connect by level <= regexp_count(test.c, '.+');

正如所料:

    PATTERN
1   azertyuiop
2   qsdfghjklm
3   wxcvbn

您可以在for line in ()内的第一个存储过程中使用此查询来逐行调用您的第二个过程。