有一个值列表,我从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格式,并希望得到任何帮助。
答案 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 ()
内的第一个存储过程中使用此查询来逐行调用您的第二个过程。