Oracle APEX назначает цвета на графике по порядку - можно ли сопоставить имени, отчеству и фамилии отображаемых сотрудников фиксированный и автоматически назначаемый цвет?
Да, можно.
Предположим, у нас есть таблица сотрудников, содержащая идентификатор, имя, отчество и фамилию. Выберу свою запись:
select id, f_name, m_name, l_name
from pers_arch_144_vi
where f_name = 'IT_Юрий' and l_name = 'Кирчин'
;
524 IT_Юрий Геннадьевич Кирчин
Мы бы хотели сопоставить каждому сотруднику в этой таблице уникальный цвет, используемый в дальнейшем для отображения их достижений на графиках. Уникальным является сочетание имени, отчества и фамилии - а цвет в Web'е состоит также из трех компонентов: Reg, Green, Blue, т.е. RGB в 16-ричной системе. Если мы сопоставим имя с R, отчество с G, а фамилию с B, - то мы получим уникальное соответствие цвета полному имени человека.
Рассмотрим сначала на одном из трех компонентов, пусть это будет имя - компонент цвета R. Возьмем от него хэш по норме 255 (максимальный диапазон цвета):
select f_name, ora_hash(f_name, 255)
from pers_arch_144_vi
where f_name = 'IT_Юрий' and l_name = 'Кирчин'
;
IT_Юрий 210
Теперь преобразуем полученное значение к 16-ричному формату:
select f_name, to_char(ora_hash(f_name, 255), 'XX')
from pers_arch_144_vi
where f_name = 'IT_Юрий' and l_name = 'Кирчин'
;
IT_Юрий D2
Учтем, что значение может быть однозначным, а нам нужно обязательное двузначное значение:
select f_name, lpad(trim(to_char(ora_hash(f_name, 255), 'XX')), 2, '0')
from pers_arch_144_vi
where f_name = 'IT_Юрий' and l_name = 'Кирчин'
;
IT_Юрий D2
Запишем по аналогии для имени, отчества и фамилии, учтя, что в некоторых случаях в данных могут быть пропуски (null):
select f_name, m_name, l_name
, nvl(lpad(trim(to_char(ora_hash(f_name, 255), 'XX')), 2, '0'), '00')
|| nvl(lpad(trim(to_char(ora_hash(m_name, 255), 'XX')), 2, '0'), '00')
|| nvl(lpad(trim(to_char(ora_hash(l_name, 255), 'XX')), 2, '0'), '00') as rgb
from pers_arch_144_vi
where f_name = 'IT_Юрий' and l_name = 'Кирчин'
;
IT_Юрий Геннадьевич Кирчин D2B2AC
Vu a la - каждому имени, отчеству и фамилии у нас сопоставлен однозначно соответствующий ему RGB цвет.
Для предотвращения проблемы полных тезок мы можем конкатенировать заведомо уникальный первичный ключ, например, к фамилии.