WEB开发网
开发学院数据库Oracle 分析Oracle/Oracle Forms中多用途代码 阅读

分析Oracle/Oracle Forms中多用途代码

 2007-05-09 12:14:34 来源:WEB开发网   
核心提示: set serveroutput on format word_wrappedexec am(insert the 8 strings here);abcdefghij abcdefghijabcdefghij abcdefghijabcdefghij abcdefghijabcdefgh
set serveroutput on format word_wrapped
exec am(insert the 8 strings here);
abcdefghij abcdefghij
abcdefghij abcdefghij
abcdefghij abcdefghij
abcdefghij abcdefghij
set serveroutput on format wrapped
exec am(insert the 8 strings here);
abcdefghij abcdefghij abcdefgh
ij abcdefghij abcdefghij abcde
fghij abcdefghij abcdefghij

上面例子教育我们要利用现有的内置的功能。不必重新发明轮子?假如“FORMAT WORD_WRAPPED”没有,那么你怎么解决?第二个例子就显示了递归方法造成的直接的截取结果。

将你的库打成包(Package)

O'Reilly出版社的《Oracle PL/SQL Developer's Workbook》 (Steven Feuerstein编写,2000年出版)中有一个关于如何创建基础库的很好的例子,并且这个例子利用了重载(overload)。你可能从以前的一篇文章中回忆起来,重载允许你在一个包(package)中使用相同的名字命名函数或者过程,并且Oracle通过比较参数的个数和类型能够知道你引用了哪个版本的函数或者过程。

一个明智的命名方法,尤其当你和Java程序员共事的话,会将包命名为“prt”,将过程命名为“ln”。这样最后的结果是“prt.ln('your message');”。Java中打印一行的方法是使用System.out.println(),这样你可以看出从目的和功能上为什么“prn.ln”这个名字很直观。在那本书中的例子处理文本、数字、日期和布尔类型的输入。

CREATE or REPLACE package prt is
Procedure ln (msg in varchar2);
Procedure ln (msg in number);
Procedure ln (msg in date);
Procedure ln (msg in boolean);
END prt;
/

上面的过程可以被扩展以包含其他的例子或者前面提到的情况。你可以让输出文字采用内置的格式。只要加入“Procedure dup(msg in number” 到包中,那么像“prt.dup(46);” 这样的调用会产生 “Duplicates counted: 46.”的输出消息。

结束语

假如有一天Oracle公司改变或者不支持内置的DBMS_OUTPUT过程,怎么办?在你的代码中有多少地方使用了这个过程?将这个功能打包到你自己的库的美妙之处在于你只需要更新一处代码——在包中的那些代码。Forms程序员社区已经花费了数千小时更新数千个,如果不是数百万的话,forms的二进制文件,因为警告消息功能或者规范发生了变化。对于DBA和程序员来说,这是宝贵的一课,教会他们如何利用Oracle提供的东西来让事情满足自己需求。

上一页  1 2 3 4 

Tags:分析 Oracle Oracle

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接