大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> ASP专区 -> ASP调用Oracle存储过程

ASP调用Oracle存储过程

时间: 2021-07-31 作者:daque

夏毅  一、asp动静网站开拓本领  跟着人们对因特网看法的加深和it本领的兴盛,循规蹈矩的静态网页仍旧越来越满意不了消息交互和电子商务的需要,所以以数据库为中心开拓不妨实行消息交互和天性化效劳的网页仍旧变成一种潮水。为了逢迎动静交互式网页的开拓趋向,展示了不妨与后盾数据库举行互动的web开拓本领,暂时比拟时髦的一类是创造在微软windows平台iis普通上的asp(active server pages)本领。它是将vbscript、javascript等一定的剧本谈话运用特出的标志嵌入到html中,当browser端提出乞求时,web效劳器会运用相映的剧本证明引擎对剧本证明实行,实行数据库的查问、窜改等工作,并把截止动静方法化成html情势送回到browser乞求端。  oracle数据库是暂时国表里最常运用的数据库,跟着oracle 8i的颁布,它又填补了对java和东西的扶助,大洪量便了搜集软硬件的开拓。所以暂时asp运用步调的开拓在很多场所须要与后盾oracle数据库打交道。底下,咱们将以多个专题计划组的运用为例,提防引见asp剧本是怎样运用ado组件的command东西考察数据库的保存进程的。  多专题计划组用户提交的消息都一致保存在以次构造的数据库表中:  create table messages(  m_id number,  m_forumname varchar2(30) not null,   m_subject varchar2(30) not null,  m_username varchar2(30) not null,  m_email varchar2(70) not null,  m_entrydate date default sysdate,  m_message varchar2(200),  m_ordernum number,  m_reply number);  个中各字段的含意如次:  m_id:每条动静独一辨别的标识号;  m_forumname:计划专题称呼;  m_subject:动静中心;  m_username:用户名;  m_email:e-mail地方;  m_entrydate:提交功夫;  m_message:动静实质;  m_ordernum:程序号;  m_reply:能否为回复动静。  二、asp剧本挪用oracle数据库包中的保存进程  1.创造数据库包  假如此刻数据库表中仍旧存有多个专题计划的动静,即使想要在网页上辨别表露各专题的称呼及各专题的动静数量,开始在oracle数据库中设置一个名为getforum的保存进程,放在名为forum_retrieve的包中。  即使保存进程归来的截止是多行数据集,此进程必需放在一个包中。包是oracle数据库的一种东西,它不妨将数据典型、保存进程、因变量、变量和恒量封装在一道,一致于vb中的规范代码模块。包在构造上又分为包头和包体两局部辨别保存的,所以这两局部也要辨别创造,包头用来设置可被外部援用的元素;包体设置本质代码,即论理实行局部。  此例的包头与包体辨别设置如次:  create or replace package forum_retrieve  as  type tforumname is table of messages.m_forumname %type index by binary_integer;  type tcount is table of number index by binary_integer;  procedure getforums  (  forumname out tforumname,  thecount out tcount  );  之上是包头的设置,开始对tforumname和tcount这两个pl/sql表典型举行证明,而后对外部挪用到的保存进程举行证明。  create or replace package body forum_retrieve  as  procedure getforums  (  forumname out tforumname,  thecount out tcount  )  as  cursor c1 is  select m_forumname   from messages  group by m_forumname  order by m_forumname;   counter number default 1;  begin   for c in c1 loop  forumname(counter):=c.m_forumname;  select count(*)   into thecount(counter)   from messages   where m_forumname=forumname(counter);  counter :=counter+1;  end loop;   end;  之上是对包体的设置,它只包括了一个名为getforums的保存进程。  因为oracle与sql server等其余数据库各别,不许在保存进程中将查问的多行截止径直归来到挪用端,历次只能径直归来一条龙截止,但在这边咱们查问的计划组称呼和数量归来的是多行数据,所以咱们运用了pl/sql的光标c1,它开始查问到各别专题称呼的截止集,而后创造游标轮回辨别对每一个计划组专题统计出各自的动静数量,将专题称呼和动静数量辨别存到名为forumname和thecount的pl/sql表变量中,并动作输入变量归来到挪用端。tforumname和tcount是pl/sql的两个表典型,这种典型一致于其余编制程序谈话的数组,它们的设置在保存进程中是没辙举行的,所以这也是必需将getforums保存进程放在一个包中的因为。  即使之上forum_retrieve包在创造进程没有展示缺点,那么它就仍旧被编写翻译后保存在oracle的数据字典中了,在sql*plus下键入以次吩咐:  select * from user_objects where object_name='forum_retrieve';  会看到名为forum_retrieve的包头和包体的状况,平常应是valid状况。  2.在asp文献中挪用保存进程  下一步咱们就不妨在存户端的asp文献中运用ado command东西来挪用这个保存进程了。开始在iis地方长机上要创造好对oracle数据库odbc的dsn贯穿,或径直在asp文献中创造dsn-less贯穿,这实足不妨按照部分爱好和简直情景来采用,代码如次:    在之上例子中保存进程惟有输入变量。即使被挪用的保存进程还包括输出变量,sql贯穿字符串应窜改如次:  sqlstr={call package.procedure(?,..,{resultset 100,output1,output2,...})}  个中?是每个输出变量的占位符,与输出变量的个数逐一对应。其余,还要辨别对每个输出变量赋值,方法如次:  cmd.parameters.append cmd.createparameter("输出变量名",advarchar,adparaminput,30,赋值变量)  个中advarchar指定变量典型是字符串;adparaminput指定变量为输出变量;30是指定字符串的最大长度,即使输出变量是整型或其余典型,则不必树立此项。一切那些恒量的设置都包括在adovbs.inc文献中,对于各别的参数典型可察看此文献举行树立。  三、asp剧本挪用oracle数据库中独力的保存进程  所谓独力的保存进程是指没有放在包中,而是动作独立的东西保存在oracle数据字典中的进程,asp剧本对这种保存进程的挪用与上述本领略有各别,以次举例证明。比方,要在asp剧本中挪用独力的名为getmessages的保存进程,代码如次:  create or replace procedure getmessages  (  forumname in messages.m_forumname%type,  lastmessage out messages.m_id%type  )  as  begin  ......‘实质简略  endgetmessages;  在asp文献中也是运用ado command东西对此进程举行挪用,代码如次:    四、干什么要运用保存进程  1.保存进程不妨将多条sql语句包括在一道实行,asp和数据库的交互不过输出、输入参数的一次往返传播,传播消息少,所以普及了实行功效。  2.保存进程在数据库中是过程编写翻译后保存的,所以其实行功效比起实行同样功效的sql语句要高很多。  3.在开拓巨型运用步调进程中不妨将少许规范功效论理模块动作保存进程放在数据库中,使得模块化步调开拓的构造越发明显,并且容易保护。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.