Oracle Developer Form中Block的重新查询
Form中某些按钮可能调用了Package对表中某些字段进行更新,但是数据库中字段的修改不会马上反映到form的界面上,所以要进行重新查询,但是用户可能使用了查询窗口进行查询之后然后再点击按钮动作,如果简单的使用execute_query进行查询的话那么就会把原来的查询条件冲掉。所以这里写了一个公用的包进行查询:
procedure query_block(p_block_name varchar2)
is
l_cursor_block varchar2(50);
l_cursor_record number;
l_cursor_item varchar2(50);
l_trigger_record number;
l_default_where varchar2(1000);
l_last_query varchar2(2000);
l_where_anchor number;
l_order_anchor number;
l_where_clause varchar2(1000);
l_message_level number;
begin
l_cursor_item := name_in('SYSTEM.CURSOR_ITEM');
l_cursor_record := name_in('SYSTEM.CURSOR_RECORD');
l_cursor_block := name_in('SYSTEM.CURSOR_BLOCK');
l_trigger_record := l_cursor_record;
l_message_level := :system.message_level;
if l_cursor_block <> p_block_name then
l_trigger_record := get_block_property(p_block_name, CURRENT_RECORD);
go_block(p_block_name);
if name_in('SYSTEM.CURSOR_BLOCK') <> p_block_name then
fnd_message.debug('DEVELOPER ERROR: To select records '||
'in another block, you must be able to navigate.');
raise FORM_TRIGGER_FAILURE;
end if;
end if;
l_default_where := get_block_property(p_block_name, DEFAULT_WHERE);
l_last_query := get_block_property(p_block_name, LAST_QUERY);
//检查是否有Order By语句
if instr(upper(l_last_query), 'ORDER BY') = 0 then
l_order_anchor := length(l_last_query);
else
l_order_anchor := instr(upper(l_last_query), 'ORDER BY') - 1;
end if;
if instr(upper(l_last_query), 'WHERE') = 0 then
l_where_anchor := l_order_anchor - 5;
else
l_where_anchor := instr(upper(l_last_query), 'WHERE') + 1;
end if;
l_where_clause := substr(l_last_query, l_where_anchor+6, l_order_anchor-l_where_anchor-5);
set_block_property(p_block_name,default_where,l_where_clause);
:system.message_level := 25;
execute_query;
:system.message_level := l_message_level;
set_block_property(p_block_name,default_where,l_default_where);
go_block(p_block_name);
go_record(l_trigger_record);
go_block(l_cursor_block);
go_record(l_cursor_record);
go_item(l_cursor_item);
end query_block;
程序首先保存当前的block,record以及Item使得在执行完之后光标依然停留在原位置而不会跳来挑去。之后判断当前所在的Block是否和参数传进来的P_Block一致,如果不一致,那么就go到P_Block上,然后获取该Block的Last_Query,由于可能查询带有Order By,所以需要判断是否带有Order By来决定截取的最终位置。取得了where条件之后,通过使用set_block_property(p_block_name,default_where,l_where_clause)以及execute_query对block进行查询,在这之前需要先保存原来的default where,在查询之后将default_where设置为默认的。最后讲光标定位到原位置。
调用的时候输入Block Name,便可以截取到Block的查询条件查询该Block。
Oracle Developer Form中Block的重新查询的更多相关文章
- [Form Builder]Form中的validate验证事件
转:http://yedward.net/?id=70 Form的validate行为可以由一个总的form级别的validation属性来控制,可以通过set_form_property来设置成PR ...
- FORM中调用JAVA组件
调用方式: 链接:可以在一个数据块中创建专门的 Bean Area项,使用 Implementation Class 特性链接到J a v a B e a n,使用W h e n - C u s t ...
- Windows 7/Vista下安装Oracle Developer Suit遇到的几个问题
http://blog.csdn.net/pan_tian/article/details/8016318 Oracle Developer Suite (ODS) 10g是在Windows 7/Vi ...
- Oracle EBS Form 发布到Server端的注意事项
前段时间在本地XP系统上测试了一些整合javabean的Form例子,想着发布到服务器段去看看能否运行正常,一开始以为会和本地XP系统一样,部署到相关的目录下进行一些配置就可以了,但实际过程却和想象的 ...
- Oracle Statspack报告中各项指标含义详解~~学习性能必看!!!
Oracle Statspack报告中各项指标含义详解~~学习性能必看!!! Data Buffer Hit Ratio#<#90# 数据块在数据缓冲区中的命中率,通常应该在90%以上,否则考虑 ...
- 如何启用Oracle EBS Form监控【Z】
前言: 有时候,因某些需要,必须知道Oracle的Form被使用的情况,以方面我们做出决策: 例如,如果某个Form被使用的次数非常多,那么,这个Form的相关SQL代码就应该优先处理,以减少服务器负 ...
- Oracle Developer Data Modeler项目实践 (转)
http://www.Oracle.com/webfolder/technetwork/tutorials/obe/db/sqldevdm/r30/datamodel2moddm/datamodel2 ...
- 如何启用Oracle EBS Form监控
前言: 有时候,因某些需要,必须知道Oracle的Form被使用的情况,以方面我们做出决策: 例如,如果某个Form被使用的次数非常多,那么,这个Form的相关SQL代码就应该优先处理,以减少服务器负 ...
- .NET Oracle Developer的福音——ODP.NET Managed正式推出
.NET Oracle Developer的福音--ODP.NET Managed正式推出 在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServ ...
随机推荐
- ios错误修改了系统头文件
一.打开终端 二.进入Xcode 输入命令: cd /Users/apple/Library/Developer/Xcode/ 三.打开当前 输入命令: open . 四.将DerivedData ...
- TLF相关资料
1\(转)http://blog.csdn.net/hu36978/article/details/5796165 TFL 一般先创建TextFlow 通过控制flowComposer属性来控制文本 ...
- [Castle Windsor]学习依赖注入
初次尝试使用Castle Windsor实现依赖注入DI,或者叫做控制反转IOC. 参考: https://github.com/castleproject/Windsor/blob/master/d ...
- VIM 同义词
vim-online-thesaurus A Vim plugin for looking up words in an online thesaurus, Now thesaurus.com 一.原 ...
- From MSI to WiX, Part 2 - ARP support, by Alex Shevchuk
Following content is directly reprinted from From MSI to WiX, Part 2 - ARP support Author: Alex Shev ...
- Oracle配置
1.安装Oracle11g--->通过Database Configuration Assistant创建新数据库 建数据库注意记住数据库名和SID,安装最后一步解锁scott[密码填tiger ...
- linux (centos 6.4)安装自定义分区方案(转载)
在计算机上安装 Linux 系统,对硬盘进行分区是一个非常重要的步骤,下面介绍几个分区方案. 方案 1 / :建议大小在 5GB 以上. swap :即交换分区,建议大小是物理内存的 1~2 倍. 方 ...
- 换行符‘\n’和回车符‘\r’
顾名思义,换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符 '\n' 10 换行(newline)'\r' 13 回车(return) 也可以表示为 ...
- IE浏览器窗口合并
百度经验:如何在IE上设置多窗口合并为单窗口(可切换)?
- CODEVS 3000公路修建问题
题目描述 Description OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Associat ...