0

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

创建或替换过程 split_address (地址 in varchar2, al1 out varchar2, al2 out varchar2, al3 out varchar2, al4 out varchar2) is.... end;

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

让我举个例子。让地址为

'门 #nn
xxxxxxxxxx
XXXXXXXXXXXX
yyyy
YYYYYYYYY
Zip-NNNNNN
zzzzzzzzzzzzzzz
ZZZZZZZZZZZZZZZZZZZZ'

如果 this 的总长度 < 100 则必须直接放入 al3 中,不要拆分。如果地址长度超过 100,那么问题就来了。这个地址有 8 行,但必须做成 4 行,如

  1. '门 #nn xxxxxxxxxx XXXXXXXXXX yyyy' -> 最大长度 100
  2. 'YYYYYYYYYYYY Zip-NNNNNNN,zzzzzzzzzzzz' -> 最大长度 100
  3. 'zzzzzzzzzzz, ZZZZZZZZZZZZZZZZZZZZZ' -> 最大长度 100
  4. 'ZZZZZZ' -> 最大长度 100

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

4

1 回答 1

0

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

其他观察:

  • 使用 oracle instr 函数搜索换行符和逗号
  • 使用 oracle length 函数判断单个字段是否超过 100 个字符
  • 您确定所有可能的输入都能产生符合指定要求的输出吗?例如,如果您有一个超过 100 个字符的输入行,但它只包含一个换行符,该怎么办?
于 2010-07-08T12:30:36.567 回答