Разбить строку на одну или несколько строк с помощью PL / SQL - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть пример двух строк со следующим макетом:

'КОМПАНИЯ А - 01 января 19 - 30 июня 19 - 100,00%'
'КОМПАНИЯ Б - 01 января -19 - 30 июня-19 - 50,00% / КОМПАНИЯ C - 01-января-19 - 30-июня-19 - 50,00% '.

Описывает процент консультанта, который работает в определенный клиент или несколько клиентов. Я получаю их информацию в макете выше. Я хотел бы разделить эти строки и сохранить их в таблице. Структура таблицы следующая (с намеренными данными в скобках):

  • ID - Число - Автомат c сгенерированный идентификатор строки
  • ConsultantID - номер - внешний ключ к таблице Person
  • Company - Varchar2 (128) - -Название компании, в которой работает консультант (Компания А)
  • StartDate - Дата - Дата начала проекта (01-Jan-19 )
  • Конечная дата - Дата - Дата окончания проекта (30 июня 19)
  • Процент - Число - Процент времени, в течение которого консультант работает на клиенте (100,00%)

Насколько я видел, максимальное количество компаний, в которых работает один, равно двум, но может быть и больше.

Я работаю в Oracle SQL, и это не подлежит обсуждению с проектом, с которым я работаю.


Я начал с PL / SQL не так долго а go (полагаю, мне нужен PL / SQL для этого, потому что я не могу найти способ сделать это только с Oracle SQL), и я не нашел способ сделать эту работу. Разделение не является проблемой, когда есть одна (очевидная) или две разные компании, но если их больше двух, я не знаю, как это автоматизировать. С такими языками, как Java, это не Это не проблема с массивами и a для l oop, но в PL / SQL для меня это все еще проблема ...

Ниже некоторого кода, который я использую для разделения.

DECLARE
total varchar2(256) := 'Company B - 01-Jan-19 - 30-Jun-19 - 50.00% / Company C - 01-Jan-19 - 30-Jun-19 - 50.00%';
firstPart varchar2(128);
secondPart varchar2(128);
BEGIN   

firstPart := SUBSTR(total, 0, (INSTR(total, '/')) -2);
secondPart := SUBSTR(total, (INSTR(total, '/')) +2);
END;

Есть ли способ заставить эту работу работать с (потенциально) бесконечными компаниями? Если это очень сложно, я могу предположить, что люди работают не более чем в пяти компаниях, но я очень хотелось бы, чтобы не было максимума.


Вторая часть - это разделение названия компании, даты начала, даты окончания и процента. Я не думаю, что это так сложно, но это может иметь отношение к решению основной проблемы. Поэтому, если у вас есть решение основной проблемы, я могу его оттуда найти.

Не стесняйтесь задавать любые вопросы или заставлять меня чувствовать себя глупо, потому что это легко, и я просто еще не нашел решение.

Заранее большое спасибо!

...