Oracle Forms中多用途代码

几年前,当Oracle放弃客户端的Forms的时候,随之消失的那些内置的函数中有一项是关于向警告消息函数(alert message function)传递参数。如果你处理错误或者缺失的输入参数(你应该这么做),Forms迁移过程的一部分是将这个内置的函数从6i版本改成9i版本。复杂的应用可能包含有上千条警告消息,并且一个主要的应用(即Forms)的变化会导致上千条改变。做这样的改变的确是一件讨人嫌的行为。

另一方面,作为一个使用PL/SQL的DBA和程序员,你到底写过多少次DBMS_OUTPUT.PUT_LINE('')?必须写的或者敲入的DBMS_OUTPUT.PUT_LINE变得非常无聊,使用方便的、内置的短小的代码不是更好吗?可能并不是经过深思熟虑,但是更多的归咎于好运或者意识到同样的东西必须敲一遍又一遍的现实,机灵的Forms程序员们创建了自己的内置函数,采用了过程的方式来产生警告消息。相同的原理可以被用在你日常的PL/SQL代码中。事实上,你可以创建一个小的消息库管理很多类型的输出消息。让我们看看一些这样的可能性。

一个简单的警告消息过程

就像在这一章节标题中表示的那样,第一个方法是非常简单的。假设你有一个常见的需求要输出某个过程、函数或者代码块更新的记录个数。让我们假定被更新行的个数是46。使用下面的过程之后,一个简单的“am(46);”语句就可以你需要的输出:

CREATE OR REPLACE procedure am (msg number) as
   begin
   dbms_output.put_line('Records updated: '||msg);
   end;
   /

另一个版本可以处理字符串类型,因此对 “ams('your message here');”的调用显著的降低了你敲入的次数。当调试或者解决问题的代码中,有这样一个简单的内置函数对输出“where am I in the code”的语句是非常宝贵的。位置报告可以确认,比如,你进入了IF-THEN-ELSE语句中哪个分支。假如你的问题代码调用了很多次其他的对象(过程、函数等等),输出像“calling function X”或者“returned from function X”这样的状态信息可以确认过程流。最终,另外一种使用情况是报告数值。你可以报告或者跟踪一个变量的值是如何被改变的。

建立一个警告消息库

当然,你的消息库的复杂性和灵活性完全取决于你。假如你的(输出)消息是简单的,那么保持函数过程简单。更准确的讲,保持函数过程的个数是最少的。只要两个简单的过程,ams和amn,就可以用来输出基于字符串和数值的消息了。

假如你需要让输出的文字内容根据运算的输出有所变化,比如DML语句的输出,那么你可能需要三个新的内置过程(插入、更新和删除运算各一个)。可能你想说明删除的类型或者原因。比如一个批处理作业的某一步是计算重复记录的个数。那么像“Records counted: 46” 这样的输出是足够有用的,但是在这种情况下,“Duplicates counted: 46”会显得更有效。因此,我们增加了2个新的内置过程。

这样,我们现在有了至少6个不同的过程。现在,管理性的问题应该比较明显了。我们寻找一些简单的,但是同时又是健壮的过程。至少有两种方式可以用于重新简化需要的功能。一种方法是让警告消息过程能够接收两个输入参数。另外一种方法,正是我准备介绍的,是把这些过程打包。

增加输入参数的个数

再说一遍,假如前面的简单方法可以满足了你的要求,那么就没必要继续深入了。创建有两个输入参数的过程,第一个参数是消息文字或者说基础,第二个参数可以是输出、位置、状态或者数值。如果你关注数据类型的转化,那么这两个输入参数的组合text/text和text/number都可以统一成text/text类型。你的确必须做这样的转换吗?不,但是为了和你已有的保持一致,如果你在别的地方做了类型映射,那么这里也进行类型映射。不管这些,下面的例子显示了第一种方法的灵活性。

CREATE OR REPLACE procedure am (msg1 varchar2, msg2 varchar2) as
   begin
   dbms_output.put_line(msg1||msg2);
   end;
   /

编译之后,下面是使用的例子。

SQL> set serveroutput on
   SQL> exec am('Here I am',46);
   Here I am46
   PL/SQL procedure successfully completed.

时间: 2024-10-31 10:04:47

Oracle Forms中多用途代码的相关文章

请教,Bean里面get 过来的日期格式插入到oracle数据库中?有代码.

问题描述 public boolean getInsert(NewCustomer customer) {Connection conn = null;PreparedStatement stmt = null;boolean a = false;int result = -1;conn = OracleDAOFactory.getConnection(); try{stmt = conn.prepareStatement(INSERT_CUSTOMER_CLIENT);stmt.setStri

表单数据-使用springmvc中controller怎么实现JSP页面数据提交到oracle数据库,求代码。

问题描述 使用springmvc中controller怎么实现JSP页面数据提交到oracle数据库,求代码. 如何使用controller进行JSP页面输入数据的存储,如图,怎么写这个功能的代码,将咨询内容提交到后台数据库中,然后在后台管理的页面进行对该问题的回复.求大神给写个代码.谢谢. 解决方案 你要把数据传递到后台,然后在保存到数据库里面,建议使用Ajax操作,先把数据传递到后台,通过业务逻辑保存好了之后,再把你的回复通过Ajax的回调函数返回到界面 解决方案二: 怎么写的,求给个代码.

检查Oracle数据库中不合理的sql语句

oracle|数据|数据库|语句 代码: select sql_text ,sharable_mem from v$sql where sharable_mem > '100000' order by sharable_mem ; 上面的sql语句是查询shared pool中占用内存超过100K的sql语句. 这个sql可以非常有效的检查出Oracle shared pool中那些严重占用内存的sql,根据我的经验,绝大多数有问题的sql语句都会在这里留下痕迹,通过在这里找出有问题的sql语句

Windows Forms中的数据绑定(一)

window|数据 Windows Forms中的数据绑定 作者:刘志波   摘要:这篇文章是讲解在Windows Forms中如何使用ADO.NET简单的将Form和包含任何结构的数据绑定在一起.通过简单或者复杂的数据绑定,把Form的control的属性绑定到指定的数据上. 目标: 学习Microsoft.NET平台中数据绑定的基础知识 学习怎样生成一个简单的数据绑定form 学习如何往你生成的数据绑定form中添加ComboBox和ListBox Learn how to base

Oracle存储过程中的角色

角色(数据库权限集)与存储过程.函数和数据包之间的交互方式是Oracle安全模型中最难以处理的一个部分.Oracle中的对象权限可以直接或通过角色间接授予用户. 假设一个HR用户向用户ABEL授予EMPLOYEES表的一些许可: GRANT select, insert, update, delete 这个语句直接把上述四个权限授予给用户ABEL.另一方面,假设一名HR用户这样做: GRANT select, insert, update, delete ON employees TO hr_r

探究Lotus Forms中的事件处理,第二部分

XForm表单对函数和事件处理功能的支持 Lotus Forms 通过构建动态的电子表单,收集用户信息并将其传递给其他应用系统,以实现业务流程的管理.与纸质表单相比,XForm 电子表单的最大优势之一就是能够动态地响应用户活动.如,根据用户输入动态改变背景颜色,响应鼠标点击事件发送邮件或提交表单,等等.本文将通过若干实例,向您详细讲述 Lotus Forms 中的事件处理机制 , 包括 XForm 表单支持的主要事件.活动和函数.通过本文的讲述,您将能够灵活自如地使用 Lotus Forms D

探究Lotus Forms中的事件处理,第一部分: 表单对计算功能的支持

Lotus Forms 通过构建动态的电子表单,收集用户信息并将其传递给其他应用系统,以实现业务流程的管理.与纸质表单相比,电子表单的最大优势之一就是能够动态地响应用户活动.如,根据用户输入动态改变背景颜色,响应鼠标点击事件发送邮件或提交表单,等等.本文将通过若干实例,向您详细讲述 Lotus Forms 中对计算功能的支持.作为复杂事件处理的基础,计算功能允许设计者通过编程实现表单对用户活动的响应. Lotus Forms 概述 Lotus Forms 提供了一种以电子表单的形式收集用户信息并

关于ORACLE数据库中汉字显示乱码

  1 引言 ORACLE数据库作为业界领先的数据库产品,近年来在国内大中型企业中得到了广泛的应用.虽然ORACLE数据库产品本身在本地化方面已做得相当成熟,但还是有不少用户反应汉字显示乱码的问题.如对同一数据库不同的用户对同一表中的username查询却得出了不同的结果: "ORACLE??????"和"ORACLE中国有限公司",显然结果中将中文字符显示为乱码,那么为什么呢?字符集的设置不当是影响ORACLE数据库汉字显示的关键问题. 2 关于字符集 字符集是O

oracle-求助诸君:EF调用Oracle包中带游标的存储过程

问题描述 求助诸君:EF调用Oracle包中带游标的存储过程 大家好,项目开发时遇到了瓶颈,是关于EF6调用Oracle包中带游标的存储过程,小弟尝试了N遍后,还是百试不得其解,望诸君助小弟一臂之力. Oracle packages如下:--------------分割线-----------------------------Oracle package bodies如下: ----------------------分割线----------------------------- 这是ADO