PL/SQL 字符串操作

Posted

技术标签:

【中文标题】PL/SQL 字符串操作【英文标题】:PL/SQL String Manipulation 【发布时间】:2010-07-08 11:07:10 【问题描述】:

我需要将作为单个字符串的地址拆分为多个字符串。以下是将地址拆分为相应地址行的 pl/sql 过程的要求。该程序的参数是:

创建或替换过程 split_address ( varchar2 中的地址, al1 出 varchar2, al2 out varchar2, al3 出 varchar2, al4 out varchar2 ) 是……结束;

    address 是一个 varchar2(250),必须分成 4 行 al1,al2,al3,al4 的每行 varchar2(100)。 地址包含换行符 CHR(10)。基于这些,必须进行拆分。 如果地址的长度小于或等于 100,则需要将整个地址放入第 3 行地址 al3。 仅当地址长度超过 100 时才需要进行拆分。 如果一行超过 100 个字符,则该行必须在中间或第 50 位附近用分隔符“,”分成两部分 该行的其余部分被添加到第二个地址行 如果行数超过 4 行,则将每个段合并为一个地址行,最多 100 个字符,最多 4 个段 地址行 3 是强制输出。

让我举个例子。让地址为

'门#nn xxxxxxxxxx XXXXXXXXXXXX 年年 YYYYYYYY Zip-NNNNNN zzzzzzzzzzzzzzz ZZZZZZZZZZZZZZZZZZZZ'

如果this总长度

    'door #nn xxxxxxxxxx XXXXXXXXXX yyyy' ->最大长度 100 'YYYYYYYYYYY Zip-NNNNNNN, zzzzzzzzzzzz' ->最大长度 100 'zzzzzzzzzzz, ZZZZZZZZZZZZZZZZZZZZZ' ->最大长度 100 'ZZZZZZ' -> 最大长度 100

系统是oracle-10g,我可以使用它的特性。问题很简单,但是将逻辑放入代码中有点困难。请提供一些提示。提前致谢。

【问题讨论】:

【参考方案1】:

我认为函数可能比过程更好。

其他观察:

使用 oracle instr 函数 搜索换行符和逗号 使用oracle长度函数判断个别字段是否 超过 100 个字符 你确定所有可能的输入都能产生输出 符合规定的要求?为了 例如,如果你有一个单 100多条输入线 字符,只包含一个 换行符?

【讨论】:

使用函数返回超过 1 个值有点困难。你想怎么做? PL/SQL 函数可以有参数,就像过程一样。 虽然允许,但通常认为函数具有 OUT 参数是不好的做法。 定义并返回记录类型 使用函数并定义并返回集合类型。查找:htmldb_util.string_to_table

以上是关于PL/SQL 字符串操作的主要内容,如果未能解决你的问题,请参考以下文章

pl/sql 从数字到字符串的转换

pl/sql developer 快捷操作: 显示不可见字符 显示历史sql语句 拷贝整个sql窗口的语句至新的sql窗口

PL/SQL集合(table)嵌套表操作实例讲解实例

Oracle_PL/SQL 动态sql

pl/sql 正则表达式验证

pl sql & java - 创建动态查询