PL / SQL字符串操作

时间:2010-07-08 11:07:10

标签: sql string plsql plsqldeveloper

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

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

  1. 地址是一个varchar2(250),它必须分成4行al1,al2,al3,al4 of varchar2(100)。
  2. 地址包含换行符CHR(10)。基于这些,必须完成拆分。
  3. 如果地址的长度小于或等于100,则需要将整个地址放入第3地址行al3。
  4. 仅当地址长度超过100时才需要进行拆分。
  5. 如果一行超过100个字符,那么该行必须通过分隔符','分隔成两个,在中间或靠近第50个位置 并将该行的其余部分添加到第二个地址行
  6. 如果行数超过4,则将每个段合并为一个地址行,最多100个字符,最多4个段
  7. 地址第3行是强制性输出。
  8. 让我举个例子。让地址为

    '门#nn
    XXXXXXXXXX
    XXXXXXXXXXX
    YYYY
    YYYYYYYYY
    拉链NNNNNN
    zzzzzzzzzzzzzzz
    ZZZZZZZZZZZZZZZZZZZZ'

    如果其总长度<1。 100然后它必须直接放入al3而不分裂。 如果地址长度超过100则问题就出现了。 该地址有8行,但必须分为4行,如

    1. 'door #nn xxxxxxxxxx XXXXXXXXXX yyyy' - &gt;长度100最多
    2. 'YYYYYYYYYYY Zip-NNNNNNN,zzzzzzzzzzzz' - &gt;长度100最多
    3. 'zzzzzzzzzzz,ZZZZZZZZZZZZZZZZZZZZZ' - &gt;长度100最多
    4. 'ZZZZZZ' - &gt;长度100最多
    5. 系统是oracle-10g,我可以使用它的功能。问题很简单,但将逻辑纳入代码有点困难。请提供一些提示。提前谢谢。

1 个答案:

答案 0 :(得分:0)

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

其他观察:

  • 使用oracle instr函数 搜索换行符和逗号
  • 使用oracle length函数来确定是否有单个字段 超过100个字符
  • 您确定所有可能的输入都可以产生输出 符合指定的要求?对于 如果你有一个,那该怎么办? 输入线超过100 字符,只包含一个 换行符?