Oracle Web应用开发之Apache架设与PL/SQL页面设计(4)

日期: 2008-06-19 作者:曹飞 来源:TechTarget中国

  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

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

曹飞
曹飞

相关推荐