2013-04-12 2 views
-1

Я разрабатываю приложение, которое берет некоторые исходные входные данные и преобразует его для вычисления конечного результата в последовательности шагов. На каждом из этих этапов возможны пользовательские входы (например, вес, выбор соответствующих строк и т. Д.). У меня есть базовый анализ, но моя цель - развернуть его в многопользовательской среде. Я бы не хотел, чтобы один пользователь установил свои входы, другой пользователь изменил некоторые входы, и оба получили неожиданные результаты.Очередные таблицы многопользовательского приложения Oracle - в APEX

Когда пользователь вводит приложение, я бы хотел, чтобы они получили копию всех основных таблиц базы данных, когда они стоят при начале сеанса, а затем могут изменять все входы (возможно, даже добавлять необработанные данные), выполняющий анализ и генерирующий вывод, который хранится отдельно от вывода всех других пользователей. Этот вывод может быть экспортирован в Excel, иначе его можно будет вытащить позже. Затем, если пользователь хочет внести изменения, внесенные в фактические таблицы базы данных (которые будут видеть все остальные пользователи), они могут совершить некоторые или все их изменения.

Я новичок в Oracle и APEX и читаю всю документацию и книги, на которых я могу положиться, но нуждаюсь в помощи, чтобы определить хорошие подходы к этой проблеме или, по крайней мере, соответствующее чтение.

+1

Почему бы не добавить столбец 'USERID' в свои промежуточные таблицы, заполнить и фильтровать с помощью функции apex' V ('USER') '. –

+0

Это хорошая идея. Мне все еще нужно выяснить, что делать с выходами, но я не думал об этом. Благодаря! – Will

+0

Вы действительно хотите это сделать? Скопировать данные из «исходной таблицы»? Что делать, если эта таблица очень большая? Если эта таблица имеет 100000 строк, и у вас есть 10 пользователей, вы внезапно получите в 10 раз больше данных. Помните о производительности. Если вы действительно новичок как с оракулом, так и с вершиной, я бы посоветовал сначала взять его в руки - и в первую очередь - вершину, и попытаться понять, как это работает и каковы ограничения. Apex - отличный инструмент и позволяет многое, но вы просто будете бороться, если не настроите свое решение на продукт, с которым работаете. – Tom

ответ

0

Я думаю, вы должны использовать коллекции APEX.

Look http://docs.oracle.com/cd/E37097_01/doc/doc.42/e35127/apex_collection.htm

UPD:

Вы должны искать апекс коллекций. Прежде всего: при входе пользователя в систему создайте одну пустую коллекцию apex для каждой таблицы, которую вы хотите изменить. Имя коллекции должно быть названо соответствующей таблицей. Тогда вы можете создать представления для каждой коллекции, глядя, как (пусть имя таблицы «tmp_tab»):

create or replace view tmp_v as 
select 
    t.c001 as id 
, t.c002 as column1 
, t.c003 as column2 
from apex_collections t 
where collection_name = 'tmp_tab'; 

Затем в каждом отчете за столом tmp_tab присоединиться к этой таблице с его точкой зрения на соответствующий сбор. Код отчета будет выглядеть так:

select 
    t.id 
, nvl(v.column1, t.column1) column1 
, nvl(v.column2, t.column2) column2 
from tmp_tab t 
left join tmp_v v on v.id = t.id 

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

+0

Одна ошибка: не будет присоединения. Должно быть полное внешнее соединение, чтобы включить новые строки, которые только что добавили пользователь. – NoGotnu