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 developer 快捷操作: 显示不可见字符 显示历史sql语句 拷贝整个sql窗口的语句至新的sql窗口