2016-08-29 56 views
1

我有一个基于一个简单的SQL像的Oracle APEX表格形式MRU过程

以表格形式
select col1, col2, check_box from view1 

用户可以更新形式check_box和COL1和COL2将根据check_box是否被选中被操纵或不。然后,基表将由我创建的MRU进程在数据库中更新。

我是,除了使用MRU更新基表,我也想调用另一个PROC做基于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有上升空间,包括丢失更新检测,锁定等),并创建一个单独的进程调用PROC,或者我应该只需创建一个可以执行这两个操作的进程(像循环遍历报表的每一行,更新基表以及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); 

请记住,如果在程序上是由MRU改变记录,运行此程序进行DML会导致MRU失败因迷路更新检测(不匹配校验)。

+0

Tom,有没有一种方法可以指定一个过程或程序包过程,以便它只对整个表格形式运行一次,并且在此过程中有某种循环来遍历行? –

+0

@ThomasTschernich有 - 虽然我不确定会有什么区别?这里apex会调用这个过程(并且注意:你可以检查每一行的行(创建,更新)的状态),而在你的循环中,你将调用每行的过程?除非你想做其他一些先进的事情? – Tom

+0

也许只是在行之间存在依赖关系。我现在无法提供一个例子,但以防在未来的某个时间点偶然发现这种情况。我发现一些额外的信息[这里](http://stackoverflow.com/questions/3962731/update-apex-tabular-form-with-plsql?rq=1),但这是非常古老的,似乎很难记录。 –

相关问题