ASP网页设计ASP挪用Oracle存储历程
写软件都是想的时间比写的时间要长的.如果反过来了就得看看是什么原因了.另外大家可以回去问问公司里的小MM.(一般企业里,跟你们交付软件接触得最多的是她们)oracle|存储历程夏毅1、ASP静态网站开辟手艺
跟着人们对因特网熟悉的加深和IT手艺的开展,刻舟求剑的静态网页已愈来愈满意不了信息交互和电子商务的需求,因而以数据库为中心开辟可以完成信息交互和本性化服务的网页已成为一种潮水。为了投合静态交互式网页的开辟趋向,呈现了能够与背景数据库举行互动的Web开辟手艺,今朝对照盛行的一类是创建在微软Windows平台IIS基本上的ASP(ActiveServerPages)手艺。它是将VBscript、JavaScript等特定的剧本言语使用特别的标志嵌进到HTML中,当Browser端提出哀求时,Web服务器会利用响应的剧本注释引擎对剧本注释实行,完成数据库的查询、修正等义务,并把了局静态格局化成HTML情势送回到Browser哀求端。
Oracle数据库是今朝国际外最常利用的数据库,跟着Oracle8i的公布,它又增加了对Java和工具的撑持,年夜小气便了收集软件的开辟。因而今朝ASP使用程序的开辟在良多场所必要与背景Oracle数据库打交道。上面,我们将以多个专题会商组的使用为例,侧重先容ASP剧本是怎样使用ADO组件的Command工具会见数据库的存储历程的。
多专题会商组用户提交的信息都一致存储在以下布局的数据库表中:
CREATETABLEmessages(
m_idNUMBER,
m_forumNamevarchar2(30)NOTNULL,
m_subjectvarchar2(30)NOTNULL,
m_usernamevarchar2(30)NOTNULL,
m_emailvarchar2(70)NOTNULL,
m_entrydatedatedefaultsysdate,
m_messagevarchar2(200),
m_ordernumnumber,
m_replynumber);
个中各字段的寄义以下:
m_id:每条动静独一辨认的标识号;
m_forumname:会商专落款称;
m_subject:动静主题;
m_username:用户名;
m_email:E-mail地点;
m_entrydate:提交工夫;
m_message:动静内容;
m_ordernum:按次号;
m_reply:是不是为回覆动静。
2、ASP剧本挪用Oracle数据库包中的存储历程
1.创建数据库包
假定如今数据库表中已存有多个专题会商的动静,假如想要在网页上分离显现各专题的称号及各专题的动静数量,起首在Oracle数据库中界说一个名为getForum的存储历程,放在名为forum_retrieve的包中。
假如存储历程前往的了局是多行数据集,此历程必需放在一个包中。包是Oracle数据库的一种工具,它能够将数据范例、存储历程、函数、变量和常量封装在一同,相似于VB中的尺度代码模块。包在布局上又分为包头和包体两部分分离存储的,因而这两部分也要分离创建,包头用来界说可被内部援用的元素;包体界说实践代码,即逻辑实行部分。
此例的包头与包体分离界说以下:
CREATEORREPLACEPACKAGEforum_retrieve
AS
TYPEtforumnameISTABLEofmessages.m_forumname%TYPEINDEXBYBINARY_INTEGER;
TYPEtcountISTABLEofNUMBERINDEXBYBINARY_INTEGER;
PROCEDUREgetForums
(
forumnameOUTtforumname,
theCountOUTtcount
);
以上是包头的界说,起首对tforumname和tcount这两个PL/SQL表范例举行声明,然后对内部挪用到的存储历程举行声明。
CREATEORREPLACEPACKAGEBODYforum_retrieve
AS
PROCEDUREgetForums
(
forumnameOUTtforumname,
theCountOUTtcount
)
AS
CURSORc1IS
SELECTm_forumname
FROMmessages
GROUPbym_forumname
ORDERbym_forumname;
counterNUMBERDEFAULT1;
BEGIN
FORcINc1LOOP
forumname(counter):=c.m_forumname;
SELECTCOUNT(*)
intothecount(counter)
FROMmessages
WHEREm_forumname=forumname(counter);
counter:=counter+1;
ENDLOOP;
END;
以上是对包体的界说,它只包括了一个名为getforums的存储历程。
因为Oracle与SQLServer等其他数据库分歧,不克不及在存储过程当中将查询的多行了局间接前往到挪用端,每次只能间接前往一行了局,但在这里我们查询的会商组称号和数量前往的是多行数据,因而我们利用了PL/SQL的光标c1,它起首查询到分歧专落款称的了局集,然后创建游标轮回分离对每个会商组专题统计出各自的动静数量,将专落款称和动静数量分离存到名为forumname和thecount的PL/SQL表变量中,并作为输入变量前往到挪用端。tforumname和tcount是PL/SQL的两个表范例,这类范例相似于其他编程言语的数组,它们的界说在存储过程当中是没法举行的,因而这也是必需将getforums存储历程放在一个包中的缘故原由。
假如以上forum_retrieve包在创立历程没有呈现毛病,那末它就已被编译后存储在Oracle的数据字典中了,在SQL*plus下键进以下命令:
SELECT*FROMuser_objectsWHEREobject_name=forum_retrieve;
会看到名为forum_retrieve的包头和包体的形态,一般应是VALID形态。
2.在ASP文件中挪用存储历程
下一步我们就能够在客户真个ASP文件中利用ADOCommand工具来挪用这个存储历程了。起首在IIS地点主机上要创建好对Oracle数据库ODBC的DSN毗连,或间接在ASP文件中创建DSN-Less毗连,这完整能够依据团体喜欢和详细情形来选择,代码以下:
在以上例子中存储历程只要输入变量。假如被挪用的存储历程还包括输出变量,SQL毗连字符串应修正以下:
SQLstr={callpackage.procedure(?,..,{resultset100,output1,output2,...})}
个中?是每一个输出变量的占位符,与输出变量的个数逐一对应。别的,还要分离对每一个输出变量赋值,格局以下:
CMD.Parameters.AppendCMD.CreateParameter("输出变量名",adVarChar,adParamInput,30,赋值变量)
个中adVarChar指定变量范例是字符串;adParamInput指定变量为输出变量;30是指定字符串的最年夜长度,假如输出变量是整型或其他范例,则不必设置此项。一切这些常量的界说都包括在ADOVBS.INC文件中,关于分歧的参数范例可检察此文件举行设置。
3、ASP剧本挪用Oracle数据库中自力的存储历程
所谓自力的存储历程是指没有放在包中,而是作为独自的工具存储在Oracle数据字典中的历程,ASP剧本对这类存储历程的挪用与上述办法略有分歧,以下举例申明。比方,要在ASP剧本中挪用自力的名为getmessages的存储历程,代码以下:
CREATEORREPLACEPROCEDUREgetmessages
(
forumnameINmessages.m_forumname%TYPE,
lastmessageOUTmessages.m_id%TYPE
)
AS
BEGIN
......‘内容省略
ENDgetmessages;
在ASP文件中也是利用ADOCommand工具对此历程举行挪用,代码以下:
4、为何要利用存</p>强大的可扩展性。ASP具有强大的扩展性,可以实现与多种网络、硬件设备的连接:通过专用的通讯线路远程接入企业;通过远程拨号服务器为远程拨号客户提供服务;通过WAP为移动电话互联网客户服务。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题: Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。 我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。 不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍 ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp),它可以看作是VC和Java的混合体吧。 下面简单介绍一下我学习ASP的方法,希望对想学习ASP的朋友有所帮助... Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
页:
[1]