2016-08-29 2 views
1

У меня есть табличная форма, основанная на простой SQL, какоракула процесс MRU апекса табличной формы

select col1, col2, check_box from view1 

пользователей могут обновлять check_box в форме, и col1 и col2 будет манипулировать в зависимости от того, отмечено check_box или нет. Затем базовая таблица будет обновлена ​​в БД процессом MRU, который я создал.

Проблема у меня есть, кроме того, обновление базовой таблицы с помощью MRU, я также хочу, чтобы вызвать другой прок, чтобы сделать что-то еще, основанное на check_box в виде

например

if check_box is unchecked, then col1 and col2 will be blanked by the MRU; 
if check_box is checked, col1 and col2 will be updated to 'Done' by the MRU, 
also a proc should be called to do something else. 

Мой вопрос, я должен придерживаться подхода MRU (как MRU имеет свой потенциал рост, включая потерянное обнаружение обновлений, блокировку и т.д. ...), и создать отдельный процесс, чтобы вызвать прок, или я должен просто создайте процесс, который выполняет оба действия (что-то вроде прокрутки каждой строки отчета, обновления базовой таблицы и проверки флажка check_box, вызов proc)?

что было бы лучше apporach?

+0

Вы уверены, что говорите об интерактивном отчете, а не в табличной форме (обновляемый SQL-запрос)? – Tom

+0

Извини, мой плохой ... Да, ты прав, это табличная форма. –

+0

Если для каждой обновляемой записи необходимо выполнить процедуру, поставьте ее в том же процессе MRU. Если это нужно выполнить только один раз для запроса страницы, тогда вы создадите его как отдельный процесс. –

ответ

1

Вы можете связать процесс с табличной формой. Это приведет к тому, что процесс будет запущен для каждой записи в табличной форме (хотя вы можете указать область выполнения, чтобы она выполнялась для каждой строки или только для новых/обновленных строк).
В этом процессе вы можете обратиться к каждому столбцу в табличной форме, используя синтаксис переменной привязки. Если столбец обновляется, вы также можете изменить значение. У вас может быть процесс, который выполняется до MRU и изменяет значение col1 и col2.

IF :CHECK_COL IS NULL THEN 
    :COL1 := NULL; 
    :COL2 := NULL; 
ELSE 
    :COL1 := 'Done'; 
    :COL2 := 'Done'; 
END IF; 

Затем создайте процесс для запуска после MRU и выполните процедуру.

MY_PROCEDURE(:SOME_COL); 

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

+0

Том, есть ли способ указать процедуру или процедуру пакета, чтобы он выполнялся только один раз для всей табличной формы и имел какой-то цикл в этой процедуре для итерации по строкам? –

+0

@ThomasTschernich есть - хотя я не уверен, какая разница? Здесь apex вызовет процесс (и обратите внимание: вы можете проверить состояние строки (созданной, обновленной)) для каждой строки, а в вашем цикле вы вызовете процесс для каждой строки? Разве вы не хотите делать что-то другое, продвинутое? – Tom

+0

Возможно, только если между строками есть зависимости. Я не могу привести пример прямо сейчас, но на всякий случай я наткнулся на это в определенный момент времени в будущем. Я нашел дополнительную информацию [здесь] (http://stackoverflow.com/questions/3962731/update-apex-tabular-form-with-plsql?rq=1), но это очень старый и вряд ли документирован. –

Смежные вопросы