Я надеюсь, что кто-то может предоставить некоторые рекомендации для более легкого способа решения этой проблемы. Я работаю над созданием сглаженного представления высоко нормированного набора данных. Целью сглаживания является представление, которое обычные люди могут использовать для разработки отчетов. Источник данных содержит несколько таблиц, как показано ниже:Oracle: выравнивание пар значений имени в таблице
CREATE TABLE VARIABLES (
VARIABLE_ID INT NOT NULL IDENTITY,
VARIABLE_NAME VARCHAR(100) NOT NULL,
VARIABLE_DATATYPE VARCHAR(100) NOT NULL,
PRIMARY KEY (VARIABLE_ID),
UNIQUE (VARIABLE_NAME,VARIABLE_DATATYPE)
)
CREATE TABLE RECORD_VALUES (
RUN_ID INT NOT NULL REFERENCES RUNS (RUN_ID) ON DELETE CASCADE,
VARIABLE_ID INT NOT NULL REFERENCES VARIABLES(VARIABLE_ID) ON DELETE CASCADE,
RECORD_ID VARCHAR(100) NOT NULL,
VARIABLE_VALUE VARCHAR(1000),
PRIMARY KEY (RUN_ID,VARIABLE_ID,RECORD_ID)
)
variable_id в таблице значений записей соответствует одной из переменных в исходном входном потоке, скажем, адрес или баланс счета. Для входной записи, содержащей 12 переменных, в таблице значений записей будет 12 строк.
Входы в исходный процесс включают записи различной ширины и имена переменных. Они разбиваются на кортежи имен/значений в таблице record_values. Я пишу процедуру, чтобы собрать переменные обратно в запись, которая выглядит как
run_id
record_id (which is actually an underlying account number)
variable_value_1
variable_value_2
...
variable_value_n
Мой текущий подход для динамического построения таблицы, находя уникальные переменные для заданного набора трасс (подробности здесь не важно), а затем построение строки SQL, которая создаст таблицу.
Моя задача - как эффективно загрузить эту итоговую рабочую таблицу из исходных данных. Поскольку имена и число переменных меняется с run_id, единственный способ, которым я могу думать, чтобы подойти к этому через что-то вроде:
create a cursor for the list of variables
for each variable in the list
create a cursor to find all the record values for that variable
for each record value
update the appropriate record/column in the work table
end
end
Это будет работать вечно, как родительские таблицы имеют 100-х миллионов строк.
Кто-нибудь имеет представление о том, как создать подход, который я могу использовать для выполнения одного обновления в каждой строке назначения?
Чтобы никто не вскакивал с дизайном оригинальных таблиц, были деловые причины для этого. Мне это не нравится, но для этого были веские причины.
Спасибо за любые мысли, которые вы можете предоставить.
Эндрю
Пробовал это, она не выглядит, как у нас компоненты OLAP установлены. – 2009-04-17 15:58:41
Это часть каждой установки Oracle 10g (включая бесплатный XE). Вы уверены, что используете 10g? – Quassnoi