摘要: 有两个简单例子,以说明 "exists"和"in"的效率问题1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ; T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。2) select * from T1 where T1.a in (select T2.a from T2) ; T1数据量非常大而T2数据量小时,T1>>T2 时,2) 的查询效率高。exists 用法:第(1)句理解其含义:其中 “select 1 from 阅读全文
posted @ 2013-03-06 11:20 小Q的DD 阅读(410) 评论(0) 推荐(0) 编辑
摘要: 在EBS中手电筒的运用是很平常的事了,但是在写代码的过程中有一句代码::parameter.G_query_find 很是让人朦胧。其实参数:parameter.G_query_find的作用是决定查询范围的一个开关。当:parameter.G_query_find:= 'TRUE'时,系统会根据我们在触发器 pre-query 中所定义的条件去查询。当:parameter.G_query_find:= 'FALSE'时,系统就会跳过查询条件,进而查询出全部记录。理解这个原理就明白手电筒使用过程中的触发器顺序和这个参数的作用。操作 触发器 相关代码 ... 阅读全文
posted @ 2013-03-06 10:49 小Q的DD 阅读(1377) 评论(1) 推荐(0) 编辑
摘要: 1. COMMIT_FORM先针对form上面的数据变动进行commit,然后对于代码中的类似DML语句也进行提交;如果form上面的数据变动和代码中的数据变动有冲突,最后以FORM上的为准。适用:一般来在直接修改FORM上的数据,就使用commit_form。2.COMMIT对form和数据库进行提交。如果form上面的数据和代码中的数据变动有冲突,最后以FORM上的为准。适用:一般来在直接使用DML代码修改数据时,就使用commit。3. DO_KEY('COMMIT_FORM')它会首先寻找form下的triggers中的KEY-COMMIT触发器,并执行KEY-COMM 阅读全文
posted @ 2013-03-06 10:07 小Q的DD 阅读(3251) 评论(0) 推荐(0) 编辑
摘要: DECLARE l_item_key VARCHAR2(30) := 'CUX_DEMO_001'; --Item Type Internal Name l_item_type VARCHAR2(30); l_process VARCHAR2(30) := 'DEFAULT_PROCESS'; --Process Name BEGIN SELECT rcv_transactions_s.nextval INTO v_itemkey FROM dual; --Assign a item key --01 创建 wf_engine.createprocess(ite 阅读全文
posted @ 2013-03-03 00:01 小Q的DD 阅读(442) 评论(0) 推荐(0) 编辑
摘要: 解决方法:1. 通过WF_RESOURCES表查询出的提示,猜测可能是工作流的角色不存在。2. 查看WF_ALL_ROLE_LOV_VL表,确认没有定义此用户。Workflow目录服务原理:Workflow的目录服务是收集用户和角色信息,以统一的格式提供给WorkFlow消息系统使用。包括:2.1.一套本地表:WF_LOCAL_XXX2.2.一套实际使用的视图:WF_USERS/WF_ROLES/WF_USER_ROLES2.3.一套各来源的视图:WF_<Orig_system>_ROLES2.4.一个批量同步请求集:Synchronize Workflow LOCAL table 阅读全文
posted @ 2013-03-02 23:50 小Q的DD 阅读(3280) 评论(0) 推荐(0) 编辑
摘要: Symptom:APP-FND-00756: Cannot find combination CCID=-1 CODE=GL# SET=50362Cause:遇到这种错误,很多时候时候是因为你的科目是无效科目。CODE=GL#,表示这个在查找Accounting FlexfieldCCID=-1,表示选择的科目ID执行下边的SQLSELECT * FROM gl_code_combinations_kfv WHERE concatenated_segments LIKE '01.203010.30102400.00%';如果返回没有值,说明你的科目在系统中不存在 阅读全文
posted @ 2013-03-02 23:04 小Q的DD 阅读(1050) 评论(0) 推荐(0) 编辑
摘要: 1.数据库中包含了对应CCID的数据库列:ACCOUNT_CCID,在块中创建非数据库项(Data最大长度为2000)2.在BLOCK级添加如下触发器: PRE-QUERY: FND_FLEX.EVENT('PRE-QUERY'); PRE-INSERT: FND_FLEX.EVENT('PRE-INSERT'); PRE-UPDATE: FND_FLEX.EVENT('PRE-UPDATE'); POST-QUERY: FND_FLEX.EVENT('POST-QUERY'); WHEN-VALIDATE-RECORD: FND 阅读全文
posted @ 2013-03-02 22:55 小Q的DD 阅读(1288) 评论(0) 推荐(0) 编辑
摘要: 在客户化Form开发中,经常会遇到需要给表格的记录块添加一个行号,行号不但作为数据行的一个序号,同时经常被作为单击的行标识,具有比较重要的业务意义。这个行号的特点是:新增行时自动生成默认行号:已有的最大行号+1用户可以修改行号为合法的数字:大于0;保证唯一如果用户修改了行号,新增生成的行号必须在用户修改行号的基础上+1实现这样的行号相对比较麻烦,下面描述如何来实现上图中所示的行号功能:在记录块的PRE-QUERY中查询出数据库中已有的最大行号,并将其记录到参数中作为最大的行号,如果单据的头是新建的,那这个参数默认的最大值则为1在行记录的WHEN-CREATE-RECORD中将最大行号的参数值+ 阅读全文
posted @ 2013-02-28 12:47 小Q的DD 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 1. Form中提交并发请求在提交请求之前,首先需要验证块,如果某些必填项没有填的话当然不能提交请求。APP_STANDARD.APP_VALIDATE(BLOCK_SCOPE); IF (not FORM_SUCCESS) THEN Raise form_trigger_failure ;END IF; IF :SYSTEM.FORM_STATUS = 'CHANGED' THEN DO_KEY('COMMIT_FORM');END IF;第二个IF语句判断系统状态,如果用户更新了一行记录,之后没有保存提交请求,那么需要在提交之前进行保存,因为可能使用的请求中 阅读全文
posted @ 2013-02-27 12:14 小Q的DD 阅读(934) 评论(0) 推荐(0) 编辑
摘要: Form中某些按钮可能调用了Package对表中某些字段进行更新,但是数据库中字段的修改不会马上反映到form的界面上,所以要进行重新查询。但是用户可能使用了查询窗口进行查询之后然后再点击按钮动作,如果简单的使用execute_query进行查询的话那么就会把原来的查询条件冲掉。所以这里写了一个公用的包进行查询:---- Name: query_block-- Purpose: BLOCK重新查询-- PROCEDURE query_block(p_block_name VARCHAR2) IS l_cursor_block VARCHAR2(50); l_cursor_reco... 阅读全文
posted @ 2013-02-25 14:34 小Q的DD 阅读(616) 评论(0) 推荐(0) 编辑