3.编写PSP网页,文件名为show.psp。
程序说明:第1行标识出该页为PL/SQL语言文件。第2行指出即将为该页面生成的PL/SQL过程名,最后PL/SQL页面将要调用数据库中的该过程来显示数据,如果省略该行则以文件名作为缺省的过程名。第3行为即将生成的过程的输入或输出参数,以标记说明,default=”1001″说明该参数为可选参数,注意,即使是数值数据类型,也要用双引号括起。第4至11行为该PSP网页的全局参数,同时也是过程show的局部参数,以标记表示。接下来以全局参数调用已经存储在数据库中的过程show_student,程序代码前后分别被置以标记。当然也可将第二步中的过程show_student的编码直接写入以标记括起的程序中,但是为了实现代码与内容的分离,尽量不要把它们混在一起。这样做的好处是分离业务逻辑与表示层,使得程序结构清晰,因为可能还有其它PSP页面调用该存储过程。在页面显示部分对全局参数的调用格式为标记,这也是输出标记,该标记可以实现字符串的连接和变量的计算,如通过psp_id的加减1达到翻页目的。在链接标记<a href=”show?id=<%=psp_id-1%>”>中,注意show为已经存储的过程,用”show?id=”的格式调用过程并输入参数。
<%@ show language=”PL/SQL”%> <%@ plsql procedure=”show” %> <%@ plsql parameter=”id” type=”NUMBER” default=”1001″%> <%! psp_id student.id%TYPE:=id;%> <%! psp_name student.name%TYPE;%> <%! psp_dob student.dob%TYPE;%> <%! psp_gender student.gender%TYPE;%> <%! psp_classyr student.classyr%TYPE;%> <%! psp_major student.major%TYPE;%> <%! psp_email student.email%TYPE;%> <%! psp_photo student.photo%TYPE;%> <% show_student ( p_id => psp_id , p_name => psp_name , p_dob => psp_dob , p_gender => psp_gender , p_classyr => psp_classyr , p_major => psp_major , p_email => psp_email , p_photo => psp_photo ); %> <html> <head> <title>学生信息</title> <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″> </head> <body bgcolor=”#999900″ text=”#FFFFFF” link=”#3366FF”> <table width=”80%” border=”0″ cellspacing=”2″ cellpadding=”2″ align=”center” height=”400″> <tr> <td colspan=”3″ height=”72″> <div align=”center”><font size=”+3″><b>学生信息</b></font></div> </td> </tr> <tr> <td width=”40%” height=”195″ rowspan=”8″><img src=”admin_/images/<%=psp_photo%>” width=”172″ height=”191″ align=”middle”></td> <td colspan=”2″ height=”30″>编号为<%=psp_id%>的学生的资料如下:</td> </tr> <tr> <td colspan=”2″ height=”30″>编号:<%=psp_id%></td> </tr> <tr> <td colspan=”2″ height=”30″>姓名:<%=psp_name%></td> </tr> <tr> <td colspan=”2″ height=”30″>出生日期:<%=psp_dob%></td> </tr> <tr> <td colspan=”2″ height=”30″>性别:<%=psp_gender%></td> </tr> <tr> <td colspan=”2″ height=”30″>年级:<%=psp_classyr%></td> </tr> <tr> <td colspan=”2″ height=”30″>主修课程:<%=psp_major%></td> </tr> <tr> <td colspan=”2″ height=”30″>电子邮件:<%=psp_email%></td> </tr> <tr> <td width=”40%” height=”74″> <div align=”center”></div> </td> <td width=”46%” height=”74″> <div align=”center”><a href=”show?id=<%=psp_id-1%>”>上一页</a> <a href=”show?id=<%=psp_id+1%>”>下一页</a></div> </td> <td height=”74″ width=”14%”> <div align=”center”></div> </td> </tr> </table> </body> </html> |
4.使用Oracle命令行程序
使用Oracle命令程序$ORACLE_HOMEbinloadpsp.exe将第3步编写的PSP页面(show.psp)载入数据库的cf/cf模式下。loadpsp.exe程序的所有选项格式如下:
l:oracleora90binloadpsp.exe
usage: loadpsp [-replace] -user <logon> [<page1><page2> …]
where <logon> ::= <username>/<password>[@<connect_string>]
本例中使用如下命令:
l:oracleora90binloadpsp -replace -user cf/cf show.psp
“show.psp”:procedure “show” created.
5.载入show.psp页面后,在数据库的cf/cf模式下生成存储过程show(该过程名由网页show.psp中的<%@ plsql procedure=”show” %>程序决定),过程中已经加入HTP进程包来调用参数。
以下是引用片段: PROCEDURE show ( id IN NUMBER default 1001) AS psp_id student.id%TYPE:=id; psp_name student.name%TYPE; psp_dob student.dob%TYPE; psp_gender student.gender%TYPE; psp_classyr student.classyr%TYPE; psp_major student.major%TYPE; psp_email student.email%TYPE; psp_photo student.photo%TYPE; BEGIN NULL; htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); htp.prn(’ ’); show_student ( p_id => psp_id , p_name => psp_name , p_dob => psp_dob , p_gender => psp_gender , p_classyr => psp_classyr , p_major => psp_major , p_email => psp_email , p_photo => psp_photo ); htp.prn(’ <html> <head> <title>学生信息</title> <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″> </head> <body bgcolor=”#999900″ text=”#FFFFFF” link=”#3366FF”> <table width=”80%” border=”0″ cellspacing=”2″ cellpadding=”2″ align=”center” height=”400″> <tr> <td colspan=”3″ height=”72″> <div align=”center”><font size=”+3″><b>学生信息</b></font></div> </td> </tr> <tr> <td width=”40%” height=”195″ rowspan=”8″><img src=”admin_/images/’); htp.prn(psp_photo); htp.prn(’” width=”172″ height=”191″ align=”middle”></td> <td colspan=”2″ height=”30″>编号为’); htp.prn(psp_id); htp.prn(’的学生的资料如下:</td> </tr> <tr> <td colspan=”2″ height=”30″>编号:’); htp.prn(psp_id); htp.prn(’</td> </tr> <tr> <td colspan=”2″ height=”30″>姓名:’); htp.prn(psp_name); htp.prn(’</td> </tr> <tr> <td colspan=”2″ height=”30″>出生日期:’); htp.prn(psp_dob); htp.prn(’</td> </tr> <tr> <td colspan=”2″ height=”30″>性别:’); htp.prn(psp_gender); htp.prn(’</td> </tr> <tr> <td colspan=”2″ height=”30″>年级:’); htp.prn(psp_classyr); htp.prn(’</td> </tr> <tr> <td colspan=”2″ height=”30″>主修课程:’); htp.prn(psp_major); htp.prn(’</td> </tr> <tr> <td colspan=”2″ height=”30″>电子邮件:’); htp.prn(psp_email); htp.prn(’</td> </tr> <tr> <td width=”40%” height=”74″> <div align=”center”></div> </td> <td width=”46%” height=”74″> <div align=”center”><a href=”show?id=’); htp.prn(psp_id-1); htp.prn(’”>上一页</a> <a href=”show?id=’); htp.prn(psp_id+1); htp.prn(’”>下一页</a></div> </td> <td height=”74″ width=”14%”> <div align=”center”></div> </td> </tr> </table> </body> </html> ’); END; |
6.浏览网址:http://localhost/pls/simpledad/show,即可看到如图1所示的页面,可点击”上一页”或”下一页”浏览相临记录。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。