选择显示字体大小

pl/sql过程


 
要想利用pl/sql程序完成比较完整的数据库任务,需要进一步学习一些高级设计要素的内容。前面编写执行的pl/sql程序,共同的特点是没有名称,只能存储为文件,然后通过执行文件的方式执行,因此称为无名块。与此对应的是在pl/sql中也引入了高级程序设计的一些概念,其中最重要的就是过程。
过程就是高级程序设计语言中的模块的概念,将一些内部联系的命令组成一个个过程,通过参数在过程之间传递数据是模块化设计思想的重要内容。

创建过程

1. 过程的语法结构
完整的过程结构如下:
create or replace procedure 过程名 as
声明语句段;
begin
执行语句段;
exception
异常处理语句段;
end;
2. 过程的特点
过程是有名称的程序块,as关键词代替了无名块的declare。
3. 创建过程实例
在【sqlplus worksheet】中执行下列pl/sql程序,该程序将创建名为tempprocedure的过程,create是创建过程的标识符,replace表示若同名过程存在将覆盖原过程。该过程定义了一个变量,其类型和testtable数据表中的currentdate字段类型相同,都是日期型,将数据表中的recordnumber字段为88的currentdate字段内容送入变量中,然后输出结果。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
create or replace procedure tempuser.tempprocedure as
tempdate tempuser.testtable.currentdate%type;
begin
select currentdate
into tempdate
from testtable
where recordnumber=88;
dbms_output.put_line(to_char(tempdate));
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】:第9章\ createprocedure.sql。
执行结果如图9.41所示。


查询过程

登录【企业管理器】,在【管理目标导航树】里选择【网络】/【数据库】/【myoracle.m.net】/【方案】/【过程】/【tempuser】选项,出现如图9.42所示的创建好的过程。


修改过程

(1)在【sqlplus worksheet】的【菜单栏】选择【文件】/【打开】菜单命令,将创建过程的createprocedure.sql文件调出进行修改,修改完毕后重新执行创建过程。
(2)在【企业管理器】里选中要修改的过程,用鼠标右键单击,在出现的快捷菜单里选择【查看/编辑详细资料】选项,如图9.43所示。
(3)出现如图9.44所示的编辑过程的【一般信息】选项卡。在【文本编辑区】可以编辑该过程,单击“确定”按钮将更新该过程,单击“编译”按钮将编译该过程的 pl/sql 源代码,使该过程可以在数据库中存储和执行。


执行过程

要执行创建的过程,必须通过主程序来调用过程。
在【sqlplus worksheet】中执行下列pl/sql程序,执行结果如图9.45所示。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
begin
tempprocedure;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】:第9章\ executeprocedure.sql。

oracle中,创建好的过程可以被任何程序调用。

带参数的过程

前面介绍的过程没有参数,主程序和过程没有数据的传递,下面介绍带参数的过程的设计和使用。
1. 参数类型
在pl/sql过程中,可以有3种类型的参数。
in参数:读入参数,主程序向过程传递参数值。
out参数:读出参数,过程向主程序传递参数值。
in out 参数:双向参数,过程与主程序双向交流数据。
2. 定义带参数的过程
在下面的pl/sql程序代码中,将创建三个调用参数。
tempdeptno:类型为in,与scott.dept.deptno的类型一致,为数值型。
tempdname:类型为out,与scott.dept.dname的类型一致,为字符型。
temploc:类型为in out,与scott.dept.loc类型一致,为字符型。
创建两个过程内参数。
loc1:与scott.dept.loc的类型一致,为字符型。
dname1:与scott.dept.dname的类型一致,为字符型。
该带参数的过程的功能是从数据表scott.dept中寻找deptno字段等于tempdeptno调用参数值的dname和loc字段,和其他字符组合,送给两个出口参数。
以system用户名、sysdba身份登录【sqlplus worksheet】,执行下列pl/sql程序,执行结果如图9.46所示。
―――――――――――――――――――――――――――――――――――――
set serveroutput on
create or replace procedure scott.tempprocedure(
tempdeptno in scott.dept.deptno%type,
tempdname out scott.dept.dname%type,
temploc in out scott.dept.loc%type)as
loc1 scott.dept.loc%type;
dname1 scott.dept.dname%type;
begin
select loc into loc1
from scott.dept
where deptno=tempdeptno;
select dname into dname1
from scott.dept
where deptno=tempdeptno;
temploc:='地址:'loc1;
tempdname:='姓名'dname1;
end;
―――――――――――――――――――――――――――――――――――――
【配套程序位置】:第9章\ createscottprocedure.sql。

调用参数分割用“,”号。
3. 使用带参数的过程
在主程序中的实际参数和过程中的形式参数的传递有很多种办法,这里推荐读者采用一一对应的办法,按对应的位置传递参数。要求实际参数和形式参数在数据类型和位置排列上做到完全一致。
在【sqlplus worksheet】中执行下列pl/sql程序,该程序调用带参数的过程scott.tempprocedure,实际参数为(10,’’,’’)
执行结果如图9.47所示。

【配套程序位置】:第9章\ executescottprocedure.sql。

读者可以尝试改变参数值,然后测试过程执行结果。

  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons