PL / SQL String Manipulation - PullRequest
       3

PL / SQL String Manipulation

0 голосов
/ 08 июля 2010

Мне нужно разделить адрес, представляющий собой одну строку, на несколько строк. Ниже приведены требования к процедуре 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 varchar2 (100) каждая.
  2. адрес содержит символы новой строки CHR (10). И на основании этого должен быть сделан раскол.
  3. если длина адреса меньше или равна 100, тогда весь адрес необходимо поместить в третью строку адреса al3.
  4. только если длина адреса больше 100, деление должно быть выполнено.
  5. если одна строка длиннее 100 символов, то строка должна быть разделена на две с помощью разделителя ',' в середине или около 50-й позиции и остаток строки добавляется ко второй адресной строке
  6. Если количество строк превышает 4, объедините каждый сегмент в одну адресную строку до максимум 100 символов до 4 сегментов
  7. адресная строка 3 является обязательным выходом.

Позвольте мне привести пример. Пусть адрес будет

'door # nn
XXXXXXXXXX
XXXXXXXXXXX
гггг
YYYYYYYYY
Zip-NNNNNN
zzzzzzzzzzzzzzz
ZZZZZZZZZZZZZZZZZZZZ '

Если общая длина составляет <100, то она должна быть помещена в al3 напрямую, без разделения. Если длина адреса больше 100, тогда возникает проблема. Этот адрес имеет 8 строк, но должен быть разделен на 4 строки, например </p>

  1. 'door #nn xxxxxxxxxx XXXXXXXXXX гггг' -> длина 100 макс.
  2. 'ГГГГГГГГГ Zip-NNNNNNN, zzzzzzzzzzzz' -> длина 100 макс.
  3. 'zzzzzzzzzzz, ZZZZZZZZZZZZZZZZZZZZ' -> длина 100 макс.
  4. 'ZZZZZZ' -> длина 100 макс.

Система oracle-10g, я могу использовать ее возможности. Проблема проста, но получить логику в коде немного сложно. Пожалуйста, дайте несколько советов. Заранее спасибо.

1 Ответ

0 голосов
/ 08 июля 2010

Я думаю, что функция может быть лучшей идеей, чем процедура.

Другие наблюдения:

  • использовать функцию Oracle для поиска новых строк и запятых
  • используйте функцию длины оракула, чтобы определить, превышают ли отдельные поля 100 символов
  • Вы уверены, что все возможные входные данные могут давать выходные данные, которые будут соответствовать указанным требованиям?Например, что если у вас есть одна строка ввода длиной более 100 символов, которая содержит только один символ новой строки?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...