ITPub博客

首页 > Linux操作系统 > Linux操作系统 > package,即时打印,PL/SQL 事务处理总结

package,即时打印,PL/SQL 事务处理总结

原创 Linux操作系统 作者:月照花 时间:2011-01-27 17:45:29 0 删除 编辑

1. package 的编写总结:

本周是我第一次学习了写一个package 从form中调用,提交并发请求后打印出html格式的报表。第一次接触到package 的写法,虽然以前也看过一些package但还是没有亲自写这样来的更加的深入。在package的编写中,主要是应用公司的模版来进行调试和对错误的处理。我的总结是所有的procedure 应用了模版后可以方便的在Debug中得到我们希望输出的调试信息,就能很快的定位错误发生的位置。

首先Procedure 分为两种,一种是为提交并发请求而定义的可执行的借口,这个Procedure 必须包含两个定义的参数(1). errbuf OUT VARCHAR2 errbuf 是在调用Procedure 后的错误信息 (2). Errcode OUT VARCHAR2 errocd是定义提交并发请求后的运行状态。若返回errcode 为1则运行状态为警告,显示黄色标识,若返回errcode 为2则运行状态为错误,显示红色标识,所以我们可以根据异常种类来确定程序运行的状态。Procedure 的另一种是在Form中直接调用或Procedure\Function 之间调用的格式,一般来说Procedure中返回错误状态和错误信息我们需要定义三个参数分别是(1). X_return_status OUT NOCOPY VARCHAR2 这个参数是用来定义调用本次过程后的返回状态,可以自己定义返回的状态,常用的返回状态可使用fnd_api.g_ret_sts_upexp_error 和 fnd_api.g_ret_sts_error (2).x_msg_count OUT NOCOPY NUMBER x_msg_count 是记录调用Procdure中产生异常的个数 (3).x_msg_data OUT NOCOPY VARCHAR2 是定义返回的错误信息,它只记录最后一次发生异常产生的定义的错误信息。如果在一个过程中我们有多个地方可能发生异常,比如多个地方有select 语句需要对异常进行捕获和处理。但是像x_msg_data 只能返回最后一次的错误信息,这是我们就需要把错误信息压入堆栈中保存,最后从堆栈中拿出错误信息。这就要使用到 stack_message 这个函数,所以我们在所以在写Package的时候应该加入像 stack_message,和raise_exception 这样的函数来帮助我们进行错误处理。

其次就是Procedure和Function的选择,因为在Package中我们可以选择使用Procedure或Function来封装功能,开始时我不明白怎么选择Procedure和Function,因为两个功能差不多,现在我知道两者是有区别的,首先就是返回值的问题,当然Function 有返回值而Procedure没有返回值,但是如果调用一个功能后希望返回多个值我们可以在参数中设置OUT类型参数来带出处理后的值。其次是Function中我们一般不进行错误处理,比较简单的不会产生异常的功能我们定义成Function比较简单,而比较复杂含有错误处理的功能我们一般定义成Procedure来进行复杂的异常捕获和处理,在Procedure中我们可以定义保存点,捕获不同类型的异常,对异常进行处理或继续抛出。定义Procedure时我们一般都要先调用hand_api.start_activity 在结束Procedure时我们调用hand_api.end_activity 但是我对这两个函数到底完成什么功能还是不太熟悉等我了解后再补上。

最后就是关于编写Package 的分析,这点很重要也是最难的,我们在编写package 前应该先分析这个package是干什么用的,Procedure 要完成什么功能,function 要完成什么功能。分析是第一位的,我在编写package的时候不注意先对功能进行分析只是闷头写,写道最后连自己都昏了,首先写主程序要完成的功能,分为几步,下来是对功能进行划分,如果能复用的功能绝对不写两个,参数的传递,怎样尽量的减少参数的个数,单个Procedure和function 完成的功能越单一越好这样不但提高易读性而且给维护带来很多便利,只要接口不变内部怎么修改都行。然后就要把各个功能的调用顺序写成图表状,这样有助与我们对每个功能调用顺序很直观。然后按照先前的顺序逐个完成,最后就是一个完整的功能。还有就是对编程风格的控制,关键语句一定要注释,这样可以降低维护的成本。对缩进大小写的把握对命名的把握还有很多很多需要学的地方。这就是我对Package编写的个人体会,可能有很多地方不准确不正确,希望老师纠正吧。

2. XML Publisher 即时打印技术:

这一周我根据颜怀均老师的文档《HAND标准化之XMLPublish即时打印》一步一步跟着做,完成了PL/SQL 编写在Form上调用过程完成即时打印XMLP 的报表而不用提交并发请求。

XMLPublish即时打印通过三步实现:

1)、 通过sql取得数据;

2)、 根据取得的数据生成xml文件;

3)、 将xml文件结合模板打印出pdf文件。

首先是XML即时打印技术的结构,它包括了(1).OAF程序包(2).JSP 文件(3).数据库package.(4).表HAND_XDO_TEMPLATES

制作的步骤是:(1). 程序的安装:将OAF的hss包上传到服务器$JAVA_TOP下,将JSP文件上传到服务器$OA_HTML 路径下,在数据库中安装 hss_pdf_print_pkg.pkg,hss_pdf_print_utl.pkg,hss_pdf_print_utl_w.pkg 三个包,在数据库中创建表HAND_XDO_TEMPLATES表。(2).修改过程hss_pdf_print_pkg.get_report_xml_data,修改传入参数的个数和类型。修改取数据的SQL语句,修改生成XML的分组标志。(3).跟做普通的XML Publisher报表一样制作RTF格式报表样式(3).在hand_xdo_templates中添加相应的对照关系(4).将hssXmlpPrint.jsp定义成功能方便调用,需要注意的是定义的功能类型为SSWA jsp 函数,在WEB HTML中给参数hssXmlpPrint.jsp (5). 可以根据需要在需要的地方调用功能。在调用功能时传递报表所需要的参数:appName=’应用的名称’&template=模板的名称 ¶ms=参数。这样就完成了XML Publisher 格式的报表即时打印技术。其实都是应用老师们的模板,是这么复杂的技术变得如此简单。感谢你们!这样还是不够的应该去研究即时打印的原理和内部的结构。学习后继续补充。

3. PL/SQL 关于事务处理部分的知识:

PL/SQL 事务也是经常用到的知识,首先事务分为:主事务,嵌套事务和自治事务。

关键字 : COMMIT : COMMIT语句能终止当前事务,并把事务中的数据库发化提交到数据库中。在我们提交变化的内容之前,其他用户是无法访问到被修改了的数据;他们所看到的数据跟未修改之前的内容完全一样。

ROLLBACK: ROLLBACK语句能终止当前事务并放弃所有的数据变更。使用回滚有两个原因。第一,如果我们不小心删除了数据,回滚能帮助我们恢复原始数据。第二,如果我们开启了一个因异常或SQL语句执行失误而不能完成的事务,回滚就能让我们的数据回到最初状态,然后重新再执行一次

SAVEPOINT:SAVEPOINT能为事务处理中的当前点进行命和标记。使用ROLLBACK TO语句时,保存点能让我们恢复作了标记的事务的部分内容,而不是恢复整个事务。

SET TRANSACTION : 我们可以使用SET TRANSACTION语句开启一个只读或只写的事务,建立隔离级别或把当前事务赋给一个指定的回滚段

例子:

在只读事务中,所有的查询都会引用同一个提供多表,多查询,读一致视图的数据库快照。其他用户可以像平时一样继续查询或更新数据。在下面的例子中,作为一个商店经理,我们可以使用一个只读事务来收集过去一天、一周或一个月的销售量。在事务中,这些数字不会受到其他更新数据的用户的影响:

DECLARE

daily_sales REAL;

weekly_sales REAL;

monthly_sales REAL;

BEGIN

...

COMMIT;

SET TRANSACTION READ ONLY NAME 'Calculate sales figures'; SELECT SUM (amt)

INTO daily_sales

FROM sales

WHERE dte = SYSDATE;

SELECT SUM (amt)

INTO weekly_sales

FROM sales WHERE dte > SYSDATE - 7;

SELECT SUM (amt)

INTO monthly_sales

FROM sales

WHERE dte > SYSDATE - 30;

COMMIT;

...

END;

嵌套事务:

嵌套事务是在一个主事务中调用其他含有子事务的方法或过程,嵌套事务和主事务共享同样的上下文,所以当主事务回滚时,嵌套事务同样回滚。

自治事务:

自治事务和嵌套事务不同的是,自治事务完全和主事务是独立的两个个体,自治事务的状态不会影响主事务,主事务的状态也不影响自治事务,当主事务回滚时自治事务不受影响。定义自治事务的关键字是AUTONOMOUS_TRANSACTION ,主事务调用自治事务后只有自制事务完成后主事务才能继续向下进行。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24908207/viewspace-686411/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-01-11

  • 博文量
    10
  • 访问量
    30426