Я пишу процедуру PL / SQL, которая загружает некоторые данные из схемы A в схему B. Обе схемы очень разные, и я не могу изменить структуру схемы B.
Столбцы в различных таблицах схемы A (объединенные в виде) необходимо вставить в схему B в виде пар ключ => значение в 2 столбцах таблицы, каждая в отдельной строке. Например, имя сотрудника может присутствовать как employee.firstname в схеме A, но его необходимо ввести в схеме B как:
id=>1, key=>'A123', value=>'Smith'
Существует почти 100 ключей, которые могут быть добавлены в будущем. Это означает, что я не хочу жестко кодировать ни одну из этих клавиш.
Пример кода:
create table schema_a_employees (
emp_id number(8,0),
firstname varchar2(50),
surname varchar2(50)
);
insert into schema_a_employees values ( 1, 'James', 'Smith' );
insert into schema_a_employees values ( 2, 'Fred', 'Jones' );
create table schema_b_values (
emp_id number(8,0),
the_key varchar2(5),
the_value varchar2(200)
);
Я думал, что элегантное решение, скорее всего, будет включать в себя таблицу поиска для определения того, какое значение вставлять для каждого ключа, и не требует эффективного жесткого кодирования десятков похожих операторов, таких как ....
insert into schema_b_values ( 1, 'A123', v_firstname );
insert into schema_b_values ( 1, 'B123', v_surname );
Что я хотел бы иметь, так это иметь локальную справочную таблицу в схеме A, в которой перечислены все ключи из схемы B, а также столбец, который дает имя столбца в таблице в схеме A, который должен использоваться для заполнения, например ключ "A123" в схеме B должен быть заполнен значением столбца "имя" в схеме A, например,
create table schema_a_lookup (
the_key varchar2(5),
the_local_field_name varchar2(50)
);
insert into schema_a_lookup values ( 'A123', 'firstname' );
insert into schema_a_lookup values ( 'B123', 'surname' );
Но я не уверен, как я мог бы динамически использовать значения из таблицы поиска, чтобы сообщить Oracle, какие столбцы использовать.
Итак, мой вопрос: существует ли элегантное решение для заполнения таблицы schema_b_values данными из schema_a_employees без жесткого кодирования для каждого возможного ключа (т. Е. A123, B123 и т. Д.)?
Приветствие.