对于层级结构的数据,connect by是个非常好用的东西。今天在查询组织层次结构的时候(根据一个部门列出所有下属部门)发现里面还有个小陷阱。原始的语句如下: SELECT pos.organization_id_child, pos.d_child_name, pos.organization_id_parent, pos.d_parent_name, LEVEL, sys_connect_by_path(pos.d_child_name, ‘/’) path FROM per_org_structure_elements_v pos WHERE pos.org_structure_version_id = 65 — 注意这里 START WITH pos.organization_id_child = 133 CONNECT BY PRIOR pos.organization_id_child = pos.organization_id_parent; 由于组织层次结构有版本控制,所以这里使用WHERE条件筛选当前的层次结构,但是结果中却出来很多同样level的重复数据。尝试换用如下SQL: SELECT pos.organization_id_child, pos.d_child_name, pos.organization_id_parent, pos.d_parent_name, LEVEL, sys_connect_by_path(pos.d_child_name, ‘/’) path FROM (SELECT * FROM per_org_structure_elements_v p WHERE p.org_structure_version_id = 65) pos START WITH pos.organization_id_child [...]
Archives for February 2009
推荐博客:Oracle Seeker
Oracle Seeker,Oracle探索者,是由汉得的一批资深技术顾问维护的博客站点,主要介绍Oracle技术的最新企业应用,各位博主都是属于Oracle EBS项目的一线实施和开发人员,因而其博客具备很高的实践参考价值。 博客主要围绕Oracle EBS相关技术做一些讨论,主要包括以下: 1. Oracle数据库 2. Oracle中间件 3. Oracle开发工具 4. Oracle EBS系统及技术 5. Oracle DW&BI 尤其的,对于OAF和ADF领域的研究,几乎可以说是代表了国内业内最前沿水平。 和该领域其他人士类似,这几位博主虽然闻名,但是依然低调。好比国外顶顶大名的OracleApps Epicenter,我相信大多数人士都订阅了该博客,但是其站点的访问量却只是区区的千余PV/日,仅为我另一无名小站的零头。 该博客已加入本站资源索引中。
ORA-00600: kwqidrdq: loop
在新克隆的应用环境中启用Workflow Deferred Agent Listener总是错误,错误信息为: [Feb 12, 2009 3:34:45 PM CST]:1234424085866:Thread[inboundThreadGroup1,5,inboundThreadGroup]:0:-1:test.domain.com.cn:10.0.0.2:-1:-1:ERROR:[SVC-GSM-WFALSNRSVC-12681-10002 : oracle.apps.fnd.wf.bes.AgentListenerProcessor.read()]:Could not executeUpdate() on { CALL WF_EVENT.LISTEN ( p_agent_name => :1, p_wait => :2, p_correlation => :3, p_deq_condition => null, p_message_count => :4, p_max_error_count => :5 )} -> java.sql.SQLException: ORA-00600: internal error code, arguments: [kwqidrdq: loop], [0], [0], [0], [0], [], [], [] ORA-06512: [...]
清理 Oracle EBS 的缓存
前日在做一些BES的开发,发现系统总是会缓存我的java程序,需要重启应用才能让更改生效。这种情况类似于OAF的缓存。实际上,系统中有专门的缓存管理机制,可以自行配置缓存有效时间和清理缓存。以前不知道,浪费了些许时间。一些常见的清理缓存的操作如下: Apache / iAS 先关闭 iAS server, 删除 $COMMON_TOP/_pages/* 对于 modplsql 缓存,删除 $IAS_ORACLE_HOME/Apache/modplsql/cache Web Browser 这个根据浏览器不同而不同,略。 Jinitiator 根据客户端Jinitiator设置,清理本地相关缓存目录即可。如:C:\Users\xzb\Oracle Jar Cache Java Java/JRE plug-in (Windows) 在Java控制面板中删除。 JVM 进功能管理员职责(Functional Administrator) -> 核心服务 -> 高速缓存结构,清理相应模块的缓存。 此处可以配置缓存有效时间。
业务事件之Java Rule Function
工作流中一个非常有用的组件是业务事件(Business Event),它可以和异构系统进行互通消息。自Oracle Application Suite 11.5.10后,业务事件就支持Java程序了。如果不考虑使用数据库的功能(透明网关、Web Services)等,对于Oracle EBS而言,业务事件就是最优先的选择了。 Metalink上找不到相应的开发文档,Oracle Workflow Developer’s Guide 中提到过,但是很简略。和PL/SQL写rule function一样,使用Java也需要注意规范,必须使用该接口: public interface SubscriptionInterface { void onBusinessEvent(Subscription eo, BusinessEvent event, WorkflowContext ctx) throws BusinessEventException; } 这三个参数作用: eo 用于获取Subscription相关信息,比如phase或参数。 event BE对象,如event name, event key等。 ctx 工作流相关上下文,比如数据库链接句柄、日志对象等。 下面是一个简单的例子: package oracle.apps.cux.sms; import oracle.apps.fnd.wf.bes.BusinessEvent; import oracle.apps.fnd.wf.bes.BusinessEventException; import oracle.apps.fnd.wf.bes.SubscriptionInterface; import oracle.apps.fnd.wf.bes.server.Subscription; import oracle.apps.fnd.wf.common.WorkflowContext; public class CuxSmsTransporter implements SubscriptionInterface [...]