oracle xsql详解(二)
dml,(Data Manipulation Language),那就意味着改变数据库记录,xsql:dml元素用来执行dml语句,包括插入,更新,删除,甚至包括创建和删除数据库对象。xsql:dml元素对处理插入数据非常有用,你还可以用他执行pl/sql块。
如:
<page xmlns:xsql="urn:oracle-xsql" connection="xsql_test">
<dml>
<xsql:dml>
begin
insert into xsql_employee values(3, 'lin', 'su', 'coder');
commit;
end;
</xsql:dml>
</dml>
<xsql:query>
select * from xsql_employee
</xsql:query>
</page>
对与简单的数据库操作来说,内置的dml标签 无疑非常方便,但是对于复杂的操作,他则显得力不从心。
因此,我们需要学习更深入的xsql:dml操作。
2).form 参数和格式化的数据结构
我们可以通过xstl来格式化数据:
1.格式化从xsql:query输出的数据。
2.格式化从客户端传过来的参数。
见下图:
3).xsql:insert-request
用于执行插入操作
让我们一步一步来看一个例子:
首先第一步我们需要一个html表单,新建一个html文件,名为signup.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>sign up</h1>
<form action="signup.xsql" method="post">
<table border="0">
<tr>
<td>Last Name:</td><td><input type="text" name="lastname" /></td>
</tr>
<tr>
<td>First Name:</td><td><input type="text" name="firstname" /></td>
</tr>
<tr>
<td>Job:</td><td><input type="text" name="job" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Sign Me Up!"></td>
</tr>
</table>
</form>
</body>
</html>
好了,html写好了,下一步我们需要创建一个xsql page来插入数据,不过再这之前,我们有必要来了解下这整个过程,正如你所猜测的,http
post request 以键值对的形式传送着参数。xsql默认的把他们转换为简单的xml文档。然后你的样式表把请求中的xml文档转换为格式化后修改操作需要的的xml格式。
我们不妨看一下,xsql默认转换成的简单的xml是什么样的。
下面的xsql page将显示默认的xml参数格式。
新建一个xsql page 名为 signup.xsql
<xsql:include-request-params xmlns:xsql="urn:oracle-xsql"/>
打开signup.html输入数据后提交.得到如下页面:
而我们需要把这个xml格式转换为如下:
<ROW>
<LASTNAME>lastnameValue</LASTNAME>
<FIRSTNAME>firstnameValue</FIRSTNAME>
<JOB>jobValue</JOB>
</ROW>
</ROWSET>
我们通过下面的xslt来进行转换,新建一个xsl文件,名为signup.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<ROWSET>
<ROW>
<LASTNAME><xsl:value-of select="request/parameters/lastname"/></LASTNAME>
<FIRSTNAME><xsl:value-of select="request/parameters/firstname"/></FIRSTNAME>
<JOB><xsl:value-of select="request/parameters/job"/></JOB>
</ROW>
</ROWSET>
</xsl:template>
</xsl:stylesheet>
我们可以验证一下是否转换成功,在刚才的signup.xsql中引用xsl文件
如下:
<?xml-stylesheet type="text/xsl" href="signup.xsl"?>
<xsql:include-request-params xmlns:xsql="urn:oracle-xsql"/>
再次提交表单,看到已经格式化好的页面:
最后我们需要将格式化好的xml插入到数据库中,修改signup.xsql,代码如下:
<page connection="xsql_test" xmlns:xsql="urn:oracle-xsql">
<xsql:insert-request table="xsql_employee" transform="signup.xsl"/>
</page>
运行结果如下:
再看数据库,数据已经插入了。
4).xsql:update-request
xsql:update-request 和xsql:insert-request非常类似,处理过程都是一样的。不同之处在于:更新是基于已经存在的某条记录更新,而插入不需要 。所以xsql在更新的时候需要知道更新哪条记录。在xsql中用xsql:update-request的key-columns属性来指定。他列出了需要更新的字段。
下面看一个例子:
html页面:useredit.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>User Info</h1>
<form action="xsql/user-update.xsql" method="post">
<table border="0">
<tr>
<td>Last Name:</td><td><input type="text" name="lastname" /></td>
</tr>
<tr>
<td>First Name:</td><td><input type="text" name="firstname" /></td>
</tr>
<tr>
<td>Job:</td><td><input type="text" name="job" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Update"></td>
</tr>
</table>
</form>
</body>
</html>
user-update.xsql
<?xml-stylesheet type="text/xsl" href="successful.xsl"?>
<page connection="xsql_test" xmlns:xsql="urn:oracle-xsql">
<xsql:update-request table="xsql_employee" key-columns="LASTNAME" transform="signup.xsl"/>
</page>
这里我们加了一个successful.xsl来格式化插入成功后显示的信息。
successful.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<h1>Update successful!</h1>
</html>
</xsl:template>
</xsl:stylesheet>
运行结果:
5).xsql:delete-request
delete-request和update-request一样,也是指定key-columns来确定要删除的行。这里就不再重复了。