EBS Form开发中的Record Group(记录组)
(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处;否则请与本人联系,违者必究)
什么是记录组
记录组是Oracle Forms内部的一种数据结构,它有类似于数据库表的行/列结构。尽管如此,但不像数据库表,记录组是属于form并定义于form中的单个对象。记录组并不是设计用于在应用运行时替代数据库表的。但是对于相对小的值列表或者,或者在客户端用于应用记录保存的中等数据结构时,记录组就是最优的选择。
对于新的应用,也应该考虑由PL/SQL V2.3提供的记录表结构。记录表在内存使用中常常更有效,且通常访问起来更快。
尽管如此,在运行时记录组可以动态构建,然而记录表的结构时在设计时决定的。如果你的应用要求结构的灵活性,应该使用记录组而不是记录表。
在编程中,如果需要二维的多数据的类型的功能时,就可以使用记录组。记录组可以有不限制数量的CHAR,NUMBER,或者DATE类型的列,但总的列的属性不能超过64K。记录组的列名不能超过30个字符。
基于查询的记录组可以存储来自于数据库表的记录,就像数据库的视图,但优点是记录组存储于Oracle Forms内部,而不是在数据库中。而且,SELECT语句可以用来在运行时动态创建和填充记录组。
记录组类型
有三种记录组类型:查询记录组,非查询记录组,和静态记录组。
查询记录组
查询记录关联到SELECT语句。查询记录组的列是根据SELECT语句引用的列从数据库中继承默认的名称,数据类型和长度。查询记录组中的记录是从关联的查询中取出的。
查询记录组既可以在设计时也可以在运行时创建和修改。
非查询记录组
非查询记录组是不需要关联查询语句的,但是它的结构和值是可以在运行时通过编程来修改的。
非查询记录组仅可以在运行时创建和修改。
静态记录组
静态记录组也是不关联查询语句的,但是,是在设计时定义的结构和行的值集,它们在运行时保持不变。
静态记录组仅可以在设计时创建和修改。
不需要显示的指明记录组类型。类型是由什么时间创建(运行时和设计时)和如何定义记录组来决定的。
关于记录组的值
记录组的实际值来自于下面三种可能的来源之一:
l 你在设计时关联到记录组的SELECT语句的运行(查询记录组).
l 填充记录组的内置子程序的执行(查询记录组和非查询记录组)
l 在设计时关联到记录组的静态值数组(静态记录组)
在设计时创建查询记录组
1 在对象导航器,点击记录组节点。
2 点击工具栏上创建。
3 在新记录组对话框,点击基于下面的查询,然后在查询文本框输入一个SELECT语句。SELECT语句的WHERE条件可以包含对全局变量和form参数的引用。
4 点击OK。
Oracle Forms将会验证SELECT语句并关闭对话框。
注意:新的记录组没有任何行。这些行是在运行时由关联记录组的查询返回的。
l 你可以编程调用内置子程序POPULATE_GROUP来运行关联查询记录组的查询。
l 当LOV是基于查询记录组,每当显示LOV,或者’使用列表验证属性’为Yes Oracle Forms需要验证文本Item的时候,Oracle Forms会运行关联记录组的查询
在运行时创建查询记录组
可以在运行时使用方法CREATE_GROUP_FROM_QUERY编程来创建查询记录组。要调用这个方法,你需要传入要关联记录组的SELECT语句。记录组中的列对应于SELECT语句引用的数据库中的列。
CREATE_GROUP_FROM_QUERY的返回值是新记录组的对象ID。并把这个返回值分配到记录组类型的变量。
调用CREATE_GROUP_FROM_QUERY创建了一个没有任何行的记录组。要填充这个记录组你必须通过调用方法POPULATE_GROUP来明确的执行这个记录组相关的查询。如果查询成功的话POPULATE_GROUP返回值是0,或者失败的时候就返回一个ORACLE错误.
创建和填充非查询的记录组
非查询记录组只可以在运行时创建。
使用CREATE_GROUP方法来创建一个非查询的记录组。因为CREATE_GROUP方法创建了一个没有行和列的记录组,通常会接着调用方法ADD_GROUP_COLUMN和ADD_GROUP_ROW.
CREATE_GROUP是返回了新的记录组内部ID的方法。ADD_GROUP_COLUMN返回新的列的ID。当你把这些ID分配给记录组和记录组列类型的变量时,你可以在后续的操作中引用他们。
你也可以使用POPULATE_GROUP_WITH_QUERY来填充非查询的记录组。这样做就会关联指明的查询到记录组并把非查询的记录组转换成查询记录组。新的查询引用的数据库列必须对应于记录组的列。
比如,你可以创建一个有合适列的非查询记录组,然后调用POPULATE_GROUP_WITH_QUERY来关联查询到记录组。
创建和填充非查询记录组:示例
/* The following example creates a record group called group_id.
** The resulting group is a three-column non-query record group
** that does not yet contain any rows.
*/
DECLARE
group_id RecordGroup;
col1_id GroupColumn;
col2_id GroupColumn;
col3_id GroupColumn;
BEGIN
/* Create a non-query group called my_groupand assign its id
** to the variable group_id.
*/
group_id := Create_Group(‘my_group‘);
/* Add three columns to the new group,using the variable
** group_id to identify the group. Thefirst two columns
** are of type CHAR_COLUMN and their lengthmust be
** specified.
** The third is of type NUMBER_COLUMN anddoes not take a
** length parameter
*/
col1_id :=Add_Group_Column(group_id,‘col1‘,CHAR_COLUMN,50);
col2_id :=Add_Group_Column(group_id,‘col2‘,CHAR_COLUMN,50);
col3_id :=Add_Group_Column(group_id,‘col3‘,NUMBER_COLUMN);
END;
关于在运行时操作记录组
一旦在运行时创建了查询或者非查询记录组,你可以对记录组做如下的操作:
l 通过添加列和行来更改它的结构
l 填充记录组
l 更改关联查询记录组的查询
l 添加和删除行
l 设置和获取列的值
l 标记或者取消行为”已选择”(selected)
注意:静态记录组只可以在设计时创建和修改。
记录组的行在内部是编号的(1,2,3等等),对单个行和列操作的时候必须使用行号来引用这些列。