收藏 分享(赏)

Oracle_Ebs_开发心得.doc

上传人:精品资料 文档编号:9351132 上传时间:2019-08-03 格式:DOC 页数:12 大小:174KB
下载 相关 举报
Oracle_Ebs_开发心得.doc_第1页
第1页 / 共12页
Oracle_Ebs_开发心得.doc_第2页
第2页 / 共12页
Oracle_Ebs_开发心得.doc_第3页
第3页 / 共12页
Oracle_Ebs_开发心得.doc_第4页
第4页 / 共12页
Oracle_Ebs_开发心得.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、技术心得一、SQL查询:1、” 列出同部门中工资高于1000的员工数量超过2 人的部门,显示部门名字、地区名称 ”.查询语句如下:select distinct dept.department_name,loc.cityfrom employees emp,departments dept,locations locwhere emp.department_id=dept.department_idand dept.location_id=loc.location_idand EXISTS(select 1 from employees emp2where emp2.department_id

2、=emp.department_idand emp2.salary1000group by emp2.department_idhaving count(emp2.department_id)2)通常我们只需要对记录逐行的筛选,对于分组数据我们只能使用分组语句avg、max 等,也就是说如果你想在select 中得到这个属性那么“它们“也必须出现在group by中或者你只想得到一个统计数据.回顾上面的例子,我们也可以用以下语句完成 :select dept.department_name,loc.city,count(*)from employees emp,departments dept

3、,locations locwhere emp.department_id=dept.department_idand dept.location_id=loc.location_idand emp.salary1000group by dept.department_name,loc.cityhaving count(*) 2对于group by来说每一条emp.department_id必对应唯一dept.department_id、dept.department_name因此不论group by department_id还是group by department_name,loc.ci

4、ty达到的效果是一样的2、用一条语句查询出scott.emp 表中每个部门工资前三位的数据:select department_id,max(salary) max_salary,max(decode (rank,2,salary,salary)mid_salary,min(salary) min_salaryfrom(select department_id,salary,rank from (select emp.department_id,emp.employee_id,emp.salary,row_number()over(partition by emp.department_id

5、order by emp.salary) as rank from employees emp) Ewhere E.rank,).(3)、用户自定义的异常处理:无错误代码,需要在本程序块完成捕捉与处理 .DECLAREv_empno employees.employee_id%TYPE :=no_result EXCEPTION;BEGINUPDATE employees SET salary = salary+100 WHERE employee_id = v_empno;IF SQL%NOTFOUND THENRAISE no_result;END IF;EXCEPTIONWHEN no_

6、result THEN DBMS_OUTPUT.PUT_LINE(你的数据更新语句失败了!);WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE(SQLCODE|-|SQLERRM);END;(4)、用户定义的异常处理, RAISE_APPLICATION_ERROR(error_number,error_message,keep_errors ),重新定义异常错误消息,为应用程序提供了一种与Oracle交互的方法,这里的error_number是从-20,000到-20,999之间的参数 .可在程序块中自定义异常,并捕捉在其他函数或存储过程中 RAISE_APPLICA

7、TION_ERROR抛出的异常,与Oracle 交互.4、PRAGMA AUTONOMOUS_TRANSACTIONORACLE8i 可以支持事务处理中的事务处理的概念这种子事务处理可以完成它自己的工作,独立于父事务处理进行提交或者回滚通过使用这种方法,开发者就能够这样的过程,无论父事务处理是提交还是回滚,它都可以成功执行(1)使用自动事务处理:DROP TABLE logtable;CREATE TABLE logtable(Username varchar2(20),Dassate_time date,Mege varchar2(60) );CREATE TABLE temp_table(

8、N number);CREATE OR REPLACE PROCEDURE log_message(p_message varchar2)ASPRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO logtable VALUES(user,sysdate,p_message);COMMIT;END log_message;BEGINLog_message(About to insert into temp_table);INSERT INTO temp_table VALUES(1);LOG_message(Rollback to insert into

9、temp_table);ROLLBACK;END;select * from logtable;select * from temp_table(查询结果无数据)(2)不使用自动事务处理:CREATE OR REPLACE PROCEDURE log_message(p_message varchar2)ASBEGININSERT INTO logtable VALUES(user,sysdate,p_message);COMMIT;END log_message;(select * from temp_table查询结果有数据 )三、报表开发:流程:1、 产生数据源:以 PL/SQL或 SQ

10、l获取数据源,并用 Reports Developer工具创建数据模型并分组.(Reports Builder生成rdf文件,或直接由PL/SQL程序包直接输出xml 、html 等文件格式)2、 注册并发程序,输出的格式为XML.这样服务器上便保存了数据定义的源文件 .3、 设计rtf报表模板,调整模板布局4、 注册数据源和模板,数据源的代码需与并发请求的代码一致实例:数量帐报表-进出存明细表1、编写报表前需了解以下五个表结构:CUX_INV_LINES_ALL、CUX_INV_HEADERS_ALL、CUX_INV_ONHAND_SHIPS_AL、CUX_INV_MATERIAL_ALL、

11、GL_CODE_COMBINATIONS,其中行表 CUX_INV_LINES_ALL存储了报表所需的主要数据 ,为查询语句的主表,从CUX_INV_ONHAND_SHIPS_ALL表中取出期初数据(保存为距今最近的月份中的一条现有量),并关联船表的四个唯一性索引,注意不可加上条件 CUX_INV_HEADERS_ALL.PERIOD_NAME=CUX_INV_SHIPS_ALL.PERIOD_NAME,因为只有TYPE_CODE为GL类型的记录及总账才存在期间。因此加上条件CUX_INV_ONHAND_SHIPS_ALL.period_name 1230, resp_id = 50541,

12、resp_appl_id = 200); mo_global.init(SQLAP); 系统环境变量由应用、责任、用户等组成,数值上应用责任 用户,优先级上应用改为SALES_ORDER);5、创建Block数据块,可使用向导不过用向导创建出来的数据块与视图中字段的名字相同,因此在视图创建的过程中最好取定适合的名字以避免更改.6、设置Block属性及其Subclass,设置item属性及其Subclass;7、设置画布属性及其Subclass,注意其与Window的关系设置;并调整画布的布局;8、编写数据操作触发器Program Unit,使用CUX_PLSQL_AUTOCREAT指定块名基表

13、名以完成基本数据记录操作的触发器,其中必用到View 中定义的row_id 字段,使用FOR UPDATE OF NO WAIT语句锁记录。(如果使用基表创建数据块,则只能使用基表的主键而非row_id取记录并完成update 、delete与insert 逻辑,或者不编写该触发器);9、在数据块的触发器中调用8中的存储过程.10、根据业务需求完成其他触发器的编写.11、上传编译(排错时注意更新时间),编译代码: frmcmp_batch $CUX_TOP/forms/ZHS/CUX_INV_CODE.fmb apps/apps output_file=$CUX_TOP/forms/ZHS/C

14、UX_INV_CODE.fmx最终的fmb文件与fmx文件名一致.12、注册Form,定义Function,加入菜单。这里的定义过程与之前的职责到菜单、功能的过程相反,注意定义Function时Form、源文件中Form 名字、文件名三者要一致.(4)、参数、LOV、导航条、滚动条、日历、主从块.1、Parameter:Parameter是Form级参数,外部程序在调用Form时,也可传递具体的参数值,从而达到对Form 的某种控制;如果不考虑外部程序传递,完全可以创建一个不基于数据库、字段不显示的特殊块来替代Parameter,通常对Parameter的初始化需要在Form级触发器Pre-F

15、orm 中完成. 我们可以根据当前用户的Profile来取得其对应的OU。2、LOV:LOV的功能可用向导完成,注意在输入query语句后可选择LOV显示的排版顺序,此外只要在LOV中出现的字段都应该定义在该数据块的基础视图中,并可在向导中设置各个字段的显示宽度、标题等.3、导航条、滚动条导航条与滚动条都设置在表单的边框附近,边框应留出0.1mm的距离因此画布的宽度除了各个数据项外应预留0.5mm.此外滚动条属于数据块的属性,添加滚动条前应先明确此滚动条操作的是那一部分数据块.4、 日历:Form中没有日历控件,日期的选择是通过一个特殊的Windowss实现的,因为系统封装的比较好,我们需要按

16、照如下三个步骤实现日期的选择:(1)、 编写Item的KEY-LISTVAL 触发器:calendar.show;(2)、 设置Item的List of Values属性:ENABLE_LIST_LAMP(3)、 设置Item的Validate from List属性:No5、 主从块:选中主块ORDER_HEADERS下的Relations,从左边工具栏点击“+ ” 选择Detail块为ORDER_LINES 、选中Prevent Maserless Operations、输入JoinCondition:ORDER_LINES.HEADER_ID = ORDER_HEADERS.HEADER

17、_ID.确定后,自动完成如下工作:(1)、 创建一个名为“ORDER_HEADERS_ORDER_LINES ”的Relation(2)、 创建一个Form级触发器ON-CLEAR-DETAILS(3)、 创建两个主块级触发器ON-POPULATE-DETAILS和ON-CHECK-DELETEMASTER(4)、 创建一个过程Query_Master_Details(5)、 设置从块关联Item的Copy Value from Item属性第(5)步系统未完成,应手动添加.(5)、关于FORM中触发器执行机制的相关理解1、查询:当用户打开浏览器后,后台捕捉到此动作,并由Pre-Form定位到

18、该表单,在Pre-Form中可先初始化parameter变量,如通过VPD安全性检查后获取合法用户的Org_Id.用户若执行查询,则先遍历表单中是否有改动先提示用户保存。而后检查此数据块是否有基础表(视图),通过在基础表(视图)上建立的SQL语句启动查询触发器而后发送查询请求(由触发器调用通信机制),请求服务器的数据。数据操作以记录为基本单位。最终显示保存多少记录或者删除几条记录。包括On-Update、On-Delete与On-Insert均是对记录的操作,可参看Program Units中数据的操作.2、状态控制:主要是项、记录、块与表单的确认.可设置Form的Validation Uni

19、t属性,默认选择item.即每当离开项时确认产生。确认为有效状态后将其标记为Valid。焦点移动到某项上时,若值不为NULL,用户输入后产生确认判断该项的数据类型、数据格式、长度,若不合法则标记失败。若合法则启动Post-Change触发器并启动When-Validate-Item触发器将该项标记为有效。记录的确认有三种状态:New、Change、Valid.记录的确认只对被改变的记录进行.若记录改变则先确认发生变化的项完成后将其标记为有效,并锁定此记录,而后启动When-Validate-Record将记录标记为有效。表单与块的确认:在表单中逐块的完成确认,若无变化则成功。若有变化则将变化了

20、的块或记录标记为有效.当用户点击保存后将以上的变化全都提交到数据库中,若无变化则提示表单无变化。此外记录的删除操作与其他操作是分开处理的,当用户删除某条记录后将立即生效并在服务器的数据库中执行删除操作3、触发器的一般执行顺序:进入对象启动的触发器:Pre-Form、Pre-Block、Pre-Record、Pre-Text-Item;离开对象:Post-Form、Post-Block、Post-Record、Post-Text-Item;移动到不同的对象时启动When-New-Form-Instance、When-New-Block-Instance、When-New-Record-Insta

21、nce、When-New-Item-Instance.所有导航触发器包括Post-Form、Post-Block、Post-Record、Post-Text-Item, Pre-Form、Pre-Block、Pre-Record、Pre-Text-Item等在When-New-Form-Instance触发器以前启动.导航触发器之后启动When-New-Block-Instance并将控制权交由用户(6)、其他的注意事项:1、为主键创建序列,主键不能出现在form中,因为必须先确认Form项,查询时此项为空抛出异常.此后当执行块触发器时调用Program Units中的数据操作,由insert

22、_row完成主键id的赋值2、 若以基表为数据源创建数据块则要么不写数据操作触发器要么以主键作为索引,完成update、delete、insert的数据操作3、 建映射表除了主键ID和必须字段外,不能包含其他表中的无关项,以避免冗余4、系统对触发器轮询,每当有更改或删除时进行记录锁定,点保存时提交到数据库. 轮询过程即表单的确认, 离开某项时自动完成确认,FND_MESSAGE函数包可用于调试.5、对FORM操作时先对记录锁定,而后完成删除、保存等操作6、在FORM中操作时若删除一条数据,退出时不做保存,则数据将回滚。做删除操作时FORM将对行进行锁定 ,由此可见Form中设置了保存点以保存最新的数据7、来自多张表中的数据块一般只能执行查询操作。主从块结构可编写从块的on-update、on-insert触发器.查询机制由系统完成.8、若操作中表单无法获取焦点,一般可以把所有网页浏览器关闭.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报