【问题标题】:Reading clob variable line by line逐行读取clob变量
【发布时间】:2014-04-28 13:07:36
【问题描述】:

有一个值列表,我将其作为 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 格式,希望能提供任何帮助。

【问题讨论】:

  • 如何将列表导入oracle?如果它现在是一个(文本)文件,你可能会更好地使用外部表。

标签: sql oracle plsql clob


【解决方案1】:

这对我来说似乎是一个好主意:使用 clob 调用一个存储的 proc 并让这个调用另一个专用于处理单行的 proc 可以节省应用服务器和 DB 之间的一些 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 () 内的第一个存储过程中使用此查询逐行调用您的第二个过程。

【讨论】:

  • 啊啊,这个评论让我开心! :-)
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 2018-04-25
  • 1970-01-01
  • 2017-07-22
  • 2016-06-19
  • 2019-08-14
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多