<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>owftc</title>
    <description>坚持</description>
    <link>http://owftc.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>hp unix  jdk1.4安装&amp; tomcat安装</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/189906" style="color:red;">http://owftc.javaeye.com/blog/189906</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          hp unix jdk1.4安装 tomcat安装<br /><br /><br />原先机器上已经装了websphere了，本想直接用ibm的jdk来启动tomcat，但是没成功，报什么ibm的一个类找不到。<br />于是上hp网站下了sdk14_14216_pa.depot，放在tmp目录下，运行swinstall -s /var/tmp/sdk14_14216_pa.depot<br /><br />也老报错，根据log提示，把一个选项去掉，就安装成功了。<br /><br />然后再<br />export JAVA_HOME=/var/tmp/sdk14_14216_pa/opt/java1.4<br />export export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib<br />export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH<br /><br />启动tomcat便可<br /><br />挺简单的东西，也得折腾
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/189906#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 05 May 2008 20:48:39 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/189906</link>
        <guid>http://owftc.javaeye.com/blog/189906</guid>
      </item>
      <item>
        <title>五一爬泰山</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/188915" style="color:red;">http://owftc.javaeye.com/blog/188915</a>&nbsp;
          发表时间: 2008年05月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　　走了老远的路，想买张回北京的火车票，被告知30号、1号、2号、3号票都卖光了。。。得，只好留下来过五一了，好不容易放假一次，不能哪都没去过，那就对不住自己，一早7点多起床，出发到了长途客运站，刚进站大门，就瞧见有一处排队排得老长，没看到队头，想想估计也就是去那地方的才会有这长多人，又想想不大对劲，是不是不用买票，排队上车再买，要不买了票估计就是有时间点了，那还需要买票吗？想归想，还是有点不放心，就走到队头问了下工作人员需不需要买票，给的回答像是“木票”，晕了，应该是不用票的意思吧，就再多问一句“那就是不用买票了”，那人点了点头...<br />　　于是就到队尾排队...一会过后，发现站偶前面的老师(这地方是个人就是老师了，上次在趵突泉，就是有个人向着我喊着"老师老师"的，楞是没反应过来...)手头上有票，问了下，原来是需要买票的，看来“木票”是要买票，还是年轻人好沟通...只好跑过去买票了，那买票的队伍也是吓人的，哎，五一就这样了。要这么搞，嘛时候买到票嘛时候上车嘛时候到那有点憧憬的地方...<br />    屁话一堆，这时候也是巧了，刚好是之前站我前面(因为这时候我已经在买票的队伍中了，所以说的是"之前")的那位老师的BF说要叫上七个人包车直接去了，省时间啊...于是就这么搞了，也不知道是路太差了，还是车太差，一路的颠簸，还好也就一小时多就能到了。车上七人都是年轻人，经了解，NND，七人中有二人是俺们同行，一个问我知道不知道北京游戏学院，还有一头是学生。难怪有位哥们说，地铁里有三个就有两个是程序员，还有一个是老头(还有这样说的，街上卖倒版光盘的都能写上两行程序，人在江湖混，还真是不容易...)。<br />　　到了泰安市的火车站，下车被告知很近了，坐公交车就可以到了，看看时间，11点，先吃饭吧，要了一份饺子、一份粥、一盘菜一份海唎豆腐汤...没吃完，走人。上了公交车，到了泰山脚下，心里面还是有那么一丝兴奋，哈哈，泰山，我来了。<br />　　了解了一下，一般情况先坐车到中天门，再从中天门爬上去。又是排队排得老长买票上山...要是跟吴帅哥爬，指不定就从山脚下爬到山顶了。<br />　　开始爬了...<br />    身体太差了，太久木有运动了，进入沉思中...
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/188915#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 02 May 2008 20:56:38 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/188915</link>
        <guid>http://owftc.javaeye.com/blog/188915</guid>
      </item>
      <item>
        <title>websphere jms开发...</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/185135" style="color:red;">http://owftc.javaeye.com/blog/185135</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          编译器对图片支持非常不友好。。。<br /><br />直接上传上来
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/185135#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Apr 2008 18:39:43 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/185135</link>
        <guid>http://owftc.javaeye.com/blog/185135</guid>
      </item>
      <item>
        <title>firefox遇到的。。。</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/185133" style="color:red;">http://owftc.javaeye.com/blog/185133</a>&nbsp;
          发表时间: 2008年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          firefox遇到的。。。<br /><br /><br />prototype.js中的Form.serialize(param) <br />参数对应form标签中的id值<br />如果用struts标签就起不了作用，因为struts的form标签不支持id属性，就算写进去，也不编译成对应的html。<br /><br /><br />getElementById(param) <br />param对应标签中的id值<br /><br /><br />...
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/185133#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Apr 2008 18:31:08 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/185133</link>
        <guid>http://owftc.javaeye.com/blog/185133</guid>
      </item>
      <item>
        <title>页面通用</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/184532" style="color:red;">http://owftc.javaeye.com/blog/184532</a>&nbsp;
          发表时间: 2008年04月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          查询页面做的有点多了，用的是struts，配置文件长长的，页面也一堆堆的，所以想了想，反正所做的页面都差不多，何不可做成通用的...<br /><br /><br />借助ajax功能，在服务端生成html代码直接抛到页面。。。<br /><br /><br />想来想去，是一个个标签做成一个类，这样类太多了，有点烦，<br />于是提取其共性，如下图，包括元素类与属性类。然后用这两类create页面上相同的组件。这样再做个可配置页面，应该可行。
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/184532#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 20 Apr 2008 10:46:21 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/184532</link>
        <guid>http://owftc.javaeye.com/blog/184532</guid>
      </item>
      <item>
        <title>cmpp3实现想法</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/181476" style="color:red;">http://owftc.javaeye.com/blog/181476</a>&nbsp;
          发表时间: 2008年04月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          为实现应用分离，分为二部分实现，见下图<br /><br /><br /><br /><br />第一部分实现设想：<br /><br />一、滑动窗口实现：<br />设全局变量waitMap(Map)、todoMap;<br />设：n=waitMap.size();<br />1、发送短信，先判断如果小于窗口大小，则直接发送、写入waitMap;如果大于窗口大小，则写入todoList，并且唤醒下面线程;<br />2、线程1：后台启一个线程，判断n如果大于窗口大小或n==0，则进行等待状态；如果小于则从todoMap中获取一条消息进行消息发送、并从todoMap中去掉此消息，加入到waitMap <br />消息中；<br />3、收到一个返回时，从waitMap中去掉此消息，并且唤醒上面线程。<br /><br />其实就是生产者与消费者的问题。。。<br /><br /><br /><br />二、未收到重收问题：<br />上述waitMap中增加最近发送时间、重发次数。<br />线程2：启动一个线程(或者几秒跑一次？)，查询waitMap中时间与当前时间差T秒则进行重发，发现重发次数大于等于3次，则从waitMap中去除，写入DB中。<br /><br /><br /><br /><br /><br />三、关于发送发送链路检测包<br />发送完一条短信后启动一个Timer，遇到下次发送将旧Timer干掉，重新启动一个Timer
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/181476#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 10 Apr 2008 22:19:30 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/181476</link>
        <guid>http://owftc.javaeye.com/blog/181476</guid>
      </item>
      <item>
        <title>重拾c之指针理解</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/142791" style="color:red;">http://owftc.javaeye.com/blog/142791</a>&nbsp;
          发表时间: 2007年11月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">//指针
#include "stdafx.h"
//传了一个地址过来，本来目的是对这个地址指向的内容进行改变，但是这个方法中又对*b指针变量重新指向了另外一个地址。
int testb(int *b){
	int c=456;
	b=&c; //地址变了
	printf("%d\n",*b);
	return 1;
}
//真正的传址应该这样：传一个地址到方法中，然后方法中不能改变这个地址，只能对这个地址指的内容进行改变
//因为方法调用完毕后，并不会将main中的地址改变(它是一个局部变量)，　要变只能将传过来的地址存放的内容进行改变，才能反应到main中的那个地址
int testc(int *b){
	*b=777; //地址没有改变，地址存放内容改变
	printf("%d\n",*b);
	return 1;
}
int main(int argc, char* argv[])
{
	int *b;
	int c=123;
	b=&c;
	testb(b);
	printf("%d\n",*b);

	testc(b);
	printf("%d\n",*b);
	return 0;
}</pre><br /><br />传址时把地址传到方法中，对这个址改变了是不会把main方法的指针变量改变。两个地址存放各自值，结果还是老的那个地址的值。
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/142791#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 22 Nov 2007 22:09:53 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/142791</link>
        <guid>http://owftc.javaeye.com/blog/142791</guid>
      </item>
      <item>
        <title>use of non-migratable database link not allowed</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/134971" style="color:red;">http://owftc.javaeye.com/blog/134971</a>&nbsp;
          发表时间: 2007年10月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          问题：oracle数据库，websphere平台，使用XA数据库源，调用存储过程，存储过程中使用了dblink，<br />就废了：use of non-migratable database link not allowed<br /><br />上网找了下，没找到解决方法，不知道有谁知道这玩意能解决吗？
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/134971#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 24 Oct 2007 01:10:41 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/134971</link>
        <guid>http://owftc.javaeye.com/blog/134971</guid>
      </item>
      <item>
        <title>关于XA使用遇到的问题</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/132991" style="color:red;">http://owftc.javaeye.com/blog/132991</a>&nbsp;
          发表时间: 2007年10月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          项目中要整个EJB，供别的系统调用<br /><br />本来不是采用容器管理事务，采用bean管理事务，想提交就提交，想回滚就回滚，<br />但是这样会给调用方带来这样一个问题：如果调用方调用ejb并且处理成功，但是在调用方接下来处理中出现异常时就没有办法回滚　这个ejb的事务。<br /><br /><br />接下来就想采用容器管理，采用xa数据源，这样的话上面的问题就可以解决，但是另一个问题又出来，就是在这个提供的ejb中，我们想保存调用的日志记录：传送了哪些数据，处理出错报的异常是什么，成功日志。<br />这样的话，因为采用容器管理，一提交或回滚就会出错，所以就只能把事务交给调用方来提交或回滚，这样的话，我们如果处理出错了，调用方就会把事务回滚，一旦事务回滚，所有数据库操作就会回滚，这样我们原先想保存错误日志的功能就失效了。<br /><br />所以目的是想：采用xa事务管理，而且又想增加日志，到底能否这样实现呢？？？<br /><br />。。。对于日志，只想保存到数据库中，不想采用文件保存。
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/132991#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Oct 2007 23:09:05 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/132991</link>
        <guid>http://owftc.javaeye.com/blog/132991</guid>
      </item>
      <item>
        <title>websphere中的Scheduler使用笔记</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/132988" style="color:red;">http://owftc.javaeye.com/blog/132988</a>&nbsp;
          发表时间: 2007年10月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          资源底下->Scheduler 新建一个后，点击"创建表"、"验证表"。例JNDI名为：tfjtaskcall<br />配置一个无状态session bean。例JNDI名：TfjSchedule<br /><br /><br />调用代码：<br /><pre name="code" class="java">InitialContext context;
try {
 out.println("test servlet initializing....");
 //begin to test schedule
 //1. init context
 context = new InitialContext();
 //2. lOOkup schedule using its jndi name
 Scheduler scheduler = (Scheduler) context.lookup("tfjtaskcall");
 //3. create Class BeanTaskInfo
 BeanTaskInfo taskInfo = (BeanTaskInfo) scheduler.createTaskInfo(BeanTaskInfo.class);
 //4. lookup sessoin bean using its jndi name
 Object obj = context.lookup("TfjSchedule");
 //5. Narrow session bean
 TaskHandlerHome home = (TaskHandlerHome) PortableRemoteObject.narrow(obj,TaskHandlerHome.class);
 //6. add the schedule implementation into taskinfo class
 taskInfo.setTaskHandler(home);
 //7. set UserCalendar for task
 Calendar now = Calendar.getInstance();
 taskInfo.setStartTime(now.getTime());
 //   taskInfo.setInitialState(BeanTaskInfo.RUNNING);
 //   taskInfo.setStartTimeInterval("0 * * * * ?");
 //   taskInfo.setRepeatInterval("0 * * * * ?");
 taskInfo.setRepeatInterval("20seconds"); //间隔20运行一次，格式为SIMPLE可这样设置
 taskInfo.setNumberOfRepeats( -1); //一直运行，不停止
 //   taskInfo.setUserCalendar("com/ibm/websphere/scheduler/calendar/DefaultUserCalendarHome", "SIMPLE");//CRON 设置格式，默认为SIMPLE
 //8. submit the task to scheduler
 TaskStatus ts = scheduler.create(taskInfo);
 out.println("user calendar is: " + taskInfo.getUserCalendarSpecifier());
 out.println("test servlet end.");

 out.println("...schedule taskId:" + ts.getTaskId());
 //9. cancle the task and purged immEDIatelly
 //scheduler.cancel(ts.getTaskId(),true);
 out.println("The schedule job has been created successfully!");
}
catch (Exception e) {
 e.printStackTrace(System.out);
}</pre><br /><br />一次启动，重启后将会自动启动
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/132988#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 17 Oct 2007 22:52:55 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/132988</link>
        <guid>http://owftc.javaeye.com/blog/132988</guid>
      </item>
      <item>
        <title>知识方面的欠缺</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/105910" style="color:red;">http://owftc.javaeye.com/blog/105910</a>&nbsp;
          发表时间: 2007年07月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          知识方面的欠缺，有时候需要花很长的时间，才能解决一个问题，但是这在明白人眼里或许应该是很simple的问题
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/105910#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Jul 2007 02:07:19 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/105910</link>
        <guid>http://owftc.javaeye.com/blog/105910</guid>
      </item>
      <item>
        <title>根据建表sql，生成对应的数据对象</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/100206" style="color:red;">http://owftc.javaeye.com/blog/100206</a>&nbsp;
          发表时间: 2007年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          根据建表sql，生成对应的数据对象...
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/100206#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jul 2007 22:49:53 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/100206</link>
        <guid>http://owftc.javaeye.com/blog/100206</guid>
      </item>
      <item>
        <title>PL/SQL 异常处理</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/95611" style="color:red;">http://owftc.javaeye.com/blog/95611</a>&nbsp;
          发表时间: 2007年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          异常分为预定义异常和用户自定义异常。<br />预定义异常是由系统定义的异常。由于它们已在standard包中预定义了，因此，这些异常可以直接在程序中使用，而不必在定义部分声明。<br />用户自定义异常则需要在定义部分声明后才能在可执行部分使用。用户自定义异常对应的错误不一定是oracle异常，例如，它可能是一个数据错误。<br />1、预定义异常<br />常见的预定义异常...<br />--下面的块中产生一个NO_DATA_FOUND异常：<br /><pre name="code" class="java">delcare
  type t_numbertabletype is table of number index by binary_integer;
  v_numbertable t_numbertabletype;
  v_tempvar number;
begin
  v_tempvar:=v_numbertable(1);
end;</pre>--下面的语句会产生INVALID_NUMBER异常，因为'123a'不是一个合法的工资值：<br /><pre name="code" class="java">insert into auths(author_code,name,birthdate,entry_date_time,salary)
  values('A00022','王',to_date('02-may-60'),to_date(04-MAR-90'),'123a');
--下面的块中将产生value_error异常：
delcare
  v_tempvar varchar2(3);
begin
  v_tempvar:='ABCD';
end;</pre><br /><br />2、异常的声明<br /><pre name="code" class="java">create or replace package globals
  --这个包中声明的对象可在任意块中引用。注意这个包没有包体。
  e_userdefinedexception exception;
end global;</pre>由于预定义异常只是与一部分oracle错误相连的异常，所以如果要处理没有与预定义异常相应的oracle的错误时，则需要为这些oracle错误声明相应的用户自定义的异常。<br />声明这样的异常需要使用exception_init编译指令。<br />例如，在块定义部分声明了一个与错误"ORA-01401:inserted value too large for column"对应的用户自定义异常e_toolarge。当在块的可执行部分向表中插入的列值超出指定的列长度时，则产生e_toolarge异常：<br /><pre name="code" class="java">declare
  v_code auths.name%type;
  e_toolarge exception;
  pragma exception_init(e_toolarge,-1401);</pre>注意，通过exception_init，一个用户自定义异常只能和一个oracle错误相连。在异常处理语句中，sqlcode和sqlerrm将返回这个oracle错误的代码和消息文本，而不是返回用户自定义消息。<br /><br />3、异常的产生<br />当与预定义异常相应的错误出现时，则该预定义异常就会自动产生。而一个用户自定义异常通常由RAISE语句来产生(由exception_init编译指令声明的用户自定义异常也可通过对应oracle错误的出现而产生)。<br />例1，在下面块中使用raise语句产生用户自定义异常e_toosmallsalary：<br /><pre name="code" class="java">declare
  --声明用户自定义异常
  e_toosmallsalary exception;
  v_currentsalary number(8,2);
  v_smallsalary number(8,2) default 100;
begin
  select salary into v_currentsalary from auths where author_code='A00002';
  if v_currentsalary&lt;v_smallsalary then
    raise e_toosmallsalary;
  end if;
end;</pre>当一个异常产生时，控制权立即交给块的异常处理部分。如果该块没有异常处理部分，则向该块的外层块传递。一旦控制权交给了异常处理部分，则再没有办法返回到块的可执行部分。<br />例2,预定义异常通常是在与之相对应的错误发生时产生。下面的块产生no_data_found异常。<br /><pre name="code" class="java">declare
  v_name varchar2(10);
begin
  select name into v_name from auths where author_code='B00006';
end;</pre>由于没有作家代码号为"B00006"的作家，所以会产生"ORA-01403:not data found"错误，它就对应于no_data_found异常。<br />例3，由exception_init编译指令声明的用户自定义异常与一个oracle错误相连，所以这样的用户自定义异常也是在一个oracle错误发生时产生。<br />上节中已声明了一个用户自定义异常e_toolarge(使用exception_init编译指令声明)。当向表中插入一个列值超出了该列指定的长度时，会自动产生该异常：<br /><pre name="code" class="java">begin
  insert into auths(author_code,name,birthdate,entry_date_time)
    values('A000001','wang','to_date('11-3月-50'),to_date('12-1月-97'));</pre><br />end;<br />由于输入的作家代码值'A000001'超出了列的长度，所以产生错误"ORA-01401:inserted value too large for column"，它对应用户自定义异常toolarge，同时控制权转到块外的调用环境。<br />通常用户自定义异常是在声明后才能产生，但如果我们使用raise_application_error函数就可以直接产生异常，并且能为异常定义用户自己指定的错误消息。执行完raise_application_error函数后，控制权转到块外的调用情境。<br />raise_application_error(error_number,error_message[,keep_errors]);<br />其中，error_number是一个错误号，值在-20000到-20999之间，error_message是与该错误相连的错误消息文本，最大不超过512个字符。keep_errors是一个boolean值。是可选参数，如果为true，则这个新的错误将加在已产生的错误列表之后，如果为false，则这个新错误将代替当前的错误列表。<br />如：<br />raise_application_error(-20001,'没有代码为'||p_author_code||'的作家存在');<br /><br /><br />4、异常处理<br />异常处理部分包含着对异常的处理语句。当一个异常相应的错误发生导致这个异常发生时，异常处理语句被执行。<br /><pre name="code" class="java">declare
  e_toosmallsalary exception;
  v_currentsalary number(8,2);
  v_smallsalary number(8,2) default 100;
begin
  select salary into v_currentsalary from auths where author_code='A00002';
  if v_currentsalary&lt;v_smallsalary then
    raise e_toosmallsalary;
  end if;
exception
  when e_toosmallsalary then
    update auths set salary=500 where author_code='A00002';
end;</pre>一条异常处理语句可以处理多个异常。只要在when子句中加由or分隔的多个异常名即可。<br />如果块中的异常没有被处理，则该块会带着未处理的异常返回调用它的程序，这会导致调用它的程序出错。如果在存储过程中出现异常，则存储过程的OUT参数将得不到返回值。<br />为了避免未处理异常带来的问题，我们最好在块的最外层使用others子句处理块中所有未处理的异常。这样就能确保所有的错误都能被发现和处理。<br />(1)处理可执行部分产生的异常<br />(2)处理定义部分产生的异常<br />如果是定义部分的一个赋值语句产生了异常，即使在当前块的异常处理部分有处理该异常的处理语句时，也不去执行，而是立刻被传递到外部块中。由外部块处理。<br />(3)处理异常处理部分产生的异常<br />在异常处理语句中也可以产生异常，这个异常可以通过raise语句产生，或是由于出现一个运行错误而产生。这两种情况下产生的异常都被立刻传递到块外。<br />(4)sqlcode和sqlerrm函数<br />由于others子句处理when子句没有处理的异常，所以在others子句中处理的异常是未知的。我们可以用sqlcode和sqlerrm函数来确定异常对应的错误代码和信息。<br />	异常种类		sqlcode		sqlerrm<br />	oracle错误对应的异常	负数		oracle错误<br />	no_data_found		+100		no data found<br />	用户自定义异常		+1		user-defined exception<br />	没有产生异常		0		ora-0000:normal,successful completion<br />注意，如果使用exception_init预编译指令声明与oracle错误相连的自定义异常，则sqlcode和sqlerrm返回对应的oracle错误代码和相应的错误信息，则不是返回"+1"和"user-defined exception"。<br />例如，下面是一个带有完整的others异常处理语句的PL/SQL块：<br /><pre name="code" class="java">declare
  e_toosmallsalary exception;
  v_currentsalary number(8,2);
  v_smallsalary number(8,2) default 100;
  v_errorcode number;--获得错误消息代码的变量。
  v_errortext varchar2(200);--获得错误消息文本的变量。
begin
  select salary into v_currentsalary from auths where author_code='A00002';
  if v_currentsalary&lt;v_smallsalary then
    raise e_toosmallsalary;
  end if;
exception
  when e_toosmallsalary then
    delete auths where author_code='A00002';
  when others then
    v_errorcode:=sqlcode;
    v_errortext:=substr(sqlerrm,1,200);
    dbms_output.put_line(v_errorcode);
    dbms_output.put_line(v_errortext);
end;</pre>注意，如果要在SQL语句中使用sqlcode和sqlerrm，则一定要先把它们的值赋给局部变量，然后再将这些局部变量用在SQL语句中，因为这些函数都是过程性的，不能直接用在SQL语句中。
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/95611#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Jun 2007 21:40:09 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/95611</link>
        <guid>http://owftc.javaeye.com/blog/95611</guid>
      </item>
      <item>
        <title>针对HP-UNIX的telnet　java程序</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/95531" style="color:red;">http://owftc.javaeye.com/blog/95531</a>&nbsp;
          发表时间: 2007年06月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">import org.apache.commons.net.telnet.*;
import java.io.*;

//针对HP-UNIX的telnet　java程序  
public class TelnetSample {
    private String tranencoding = "iso-8859-1";
    private String aixencodeing = "gb2312";
    private TelnetClient telnet = new TelnetClient();
    private InputStream in;
    private PrintStream out;
    private char prompt = '#'; //

    public TelnetSample(String server, String user, String password) {
        if ("root".equals(user)) {
            this.prompt = '#';
        } else {
            this.prompt = '>';
        }
        try {
            telnet.connect(server, 23);
            in = telnet.getInputStream();
            out = new PrintStream(telnet.getOutputStream());
            readUntil("login: ");
            write(user);
            readUntil("Password: ");
            write(password);
            readUntil(prompt + "");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public TelnetSample(BufferedReader br) {
        try {
            System.out.print("server address:");
            telnet.connect(br.readLine(), 23);
            in = telnet.getInputStream();
            out = new PrintStream(telnet.getOutputStream());
            readUntil("login: ");
            String user = br.readLine();
            if ("root".equals(user)) {
                this.prompt = '#';
            } else {
                this.prompt = '>';
            }
            write(user);
            readUntil("Password: ");
            write(br.readLine());
            readUntil(prompt + ""); //打印登录后的信息
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String su(String password) {
        try {
            write("su");
            readUntil("Password: ");
            write(password);
            prompt = '#';
            return readUntil(prompt + "");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    public String readUntil(String pattern) {
        try {
            char lastChar = pattern.charAt(pattern.length() - 1);
            StringBuffer sb = new StringBuffer();
            char ch = (char) in.read();
            while (true) {
                sb.append(ch);
                if (ch == lastChar) {
                    if (sb.toString().endsWith(pattern)) {
                        String temp = sb.toString();
                        System.out.print(new String(temp.getBytes(tranencoding),
                                aixencodeing));
                        return temp;
                    }
                }
                ch = (char) in.read();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void write(String value) {
        try {
            out.println(value);
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public String sendCommand(String command) {
        try {
            write(command);
            return readUntil(prompt + "");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public void disconnect() {
        try {
            telnet.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        BufferedReader br = null;
        TelnetSample telnet = null;
        try {
//            TelnetSample telnet = new TelnetSample("10.0.76.151", "root",
//                    "root");
            br = new BufferedReader(new
                                    InputStreamReader(System.in));
            telnet = new TelnetSample(br);
            String s = "";
            boolean b = false;
            while (!(s = br.readLine()).equals("exit")) {
                s = s.replaceAll("#|>", "");
                if (b) {
                    telnet.write(s);
                    telnet.prompt = '#';
                    telnet.readUntil(telnet.prompt + "");
                    b = false;
                    continue;
                }
                if (s.startsWith("su") && telnet.prompt == '>') {
                    telnet.write("su");
                    telnet.readUntil("Password: ");
                    b = true;
                    continue;
                }
                if("yes".equals(s)||"su".equals(s)){ //如果是root则不能用su命令
                    System.out.println("not found. ");
                    System.out.print(telnet.prompt);
                    continue;
                }
                telnet.sendCommand(s);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (br != null) {
                try {
                    br.close();
                } catch (IOException ex) {
                }
            }
            if (telnet != null) {
                telnet.disconnect();
            }
        }
    }
}</pre><br /><br />需要commons-net-1.4.1.jar包，<br />跑起来是没问题<br />这代码被自己改成这样，自己看都觉得烂，且乱！        哎<br /><br /><br /><br /><br /><br /><br />下面这个是同事推荐的，很不错的
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/95531#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Jun 2007 14:37:03 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/95531</link>
        <guid>http://owftc.javaeye.com/blog/95531</guid>
      </item>
      <item>
        <title>PL/SQL-包</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/95153" style="color:red;">http://owftc.javaeye.com/blog/95153</a>&nbsp;
          发表时间: 2007年06月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          包可将一些有联系的对象放在其内部。任何能在块定义部分出现的对象都可以在包中出现。这些对象包括存储过程、函数、游标、自定义的类型(例如PL/SQL表和记录)和变量。<br />我们可以在其它的PL/SQL块中引用包中的这些对象。也就是说，包为PL/SQL提供了全局变量。<br />1、包的定义<br />一个包由两个独立的部分组成---包头和包体。各部分被单独地存放在数据字典中。定义一个包，要分别定义包头和包体。<br />(1)定义包头<br />存储过程或函数必须在包头中预定义。也就是说，在包头中仅定义存储过程名或函数名以及它们的参数。存储过程或函数的执行代码将在包体中定义。这不同于无名块中定义存储过程和函数。<br /><pre name="code" class="java">create or replace package authspack as
  --获得auths表中作家的工资。
  procedure querysalary(p_code auths.author_code%type,p_salary out auths.salary%type);
  --向auths表插入记录。
  procedure insertauthor(p_code auths.authr_code%type,p_name auths.name%type,p_sex auths.sex%type,p_birthdate auths.birthdate%type,p_entry_date_time auths.entry_date_time%type);
end authspack;</pre><br />(2)定义包体<br />包体是一个数据字典对象。只有在包头成功编译后，包体才能被编译。包体只包含包头中已预定义的子程序的代码。在包头中定义(不是预定义)的对象可以直接在包体中使用，不必再在包体中定义。<br />下面是authspack包的包体：<br /><pre name="code" class="java">create or replace package body authspack is
  --获得auths表中作家的工资。
  procedure querysalary(p_code auths.author_code%type,p_salary out auths.salary%type)  as
  begin
    select salary into p_salaary from auths where author_code=p_code;
  end querysalary;
  --向auths表插入记录。
  procedure insertauthor(p_code auths.authr_code%type,p_name auths.name%type,p_sex auths.sex%type,p_birthdate auths.birthdate%type,p_entry_date_time auths.entry_date_time%type) as
  begin
    insert into auths(author_code,name,sex,birthdate,entry_date_time)
      values(p_code,p_name,p_sex,p_birthdate,p_entry_date_time);
  end insertauthor;
end authspack;</pre>如果包头不包含存储过程和函数，则不必定义包体。如果包头中有预定义的子程序，则在包体中必须编写其子程序代码，而且包头和包体两部分指定的子程序必须一致，这包括相同的子程序、参数名和参数类型。<br />(3)包的初始化<br />包可被初始化，只是初始化部分在包体的最后部分被定义。<br /><pre name="code" class="java">create or replace package authorinfopack as
  v_auths_sex varchar2(2);
  procedure author_sex(p_author_code auths.author_code%type,p_sex out varchar2);
end authorinfopack;
--定义包体
create or replace package body authorinfopack as
  procedure author_sex(p_author_code auths.author_code%type,p_sex out varchar2) as
    v_sex number;
  begin
    select sex into v_sex from auths where author_code=p_author_code;
    if v_sex=0 then
      p_sex:='女';
    else
      p_sex:='男';
    end if;
  end author_sex;
--初始化部分。
begin
  author_sex('A00001',v_auths_sex);
end authorinfopack;</pre><br /><br />2、包的使用<br />(1)包中对象的引用<br />在包中定义的任意对象都可在包外使用，只是在引用该对象前用包名做前缀。<br />例如，我们可通过如下PL/SQL语句调用authspack包中的存储过程querysalary：<br />--设置存储缓冲区的大小。<br /><pre name="code" class="java">set serveroutput on size 100000
declare
  v_salary auths.salary%type;
begin
  authspack.querysalary('A00010',v_salary);
  --显示过程querysalary的查询结果。
  dbms_output.put_line('A00010作家的工资为：');
  dbms_output.put_line(v_salary);
end;</pre><br />(2)重载包中的子程序<br />在包的内部，存储过程和函数都可被重载，这意味着有多个存储过程或函数可以使用同一个名称，但是参数不能相同。这样就允许用不同的参数调用同一个名字的过程或函数。<br />重载是非常有用的技术，但是，它也有一些约束，这些约束如下所示：<br />A.当仅仅参数名不同或者是模式(in、out、in out)不同时，不能重载子程序。例如：<br />  procedure overload(p_par in char);      procedure overload(p_par out char);　　　不能这样重载。<br />B.不能对仅有返回类型的函数进行重载。例如，下面这样是不能重载的：<br />  function overload fun return char;      function overload fun return binary_integer;<br />C.重载函数的参数必须是数据类型不同或其类型间不可自动转换。例如，由于char和varchar2的变量可以自动转换，因此不能重载下面的存储过程：<br />  procedure overloadchar(p_theparameter in char);   procedure overloadchar(p_theparameter in varchar2);<br />尽管在定义包含违反上述限制的子程序的包时不会报编译错误。但是，运行时PL/SQL引擎不能调用该子程序，会出现错误"PLS-307:too many declarations of 'subprogram' match this call."。<br /><br />3、在SQL语句中使用的函数<br />通常在SQL语句中不能调用PL/SQL函数(无论是单独存储在数据库中的函数还是包中的函数)，因为PL/SQL函数是过程性的语句。<br />在PL/SQL2.1以上版本中放宽了这个限制，但函数必须满足特定的约束才能在SQL语句中使用。<br />PL/SQL为函数指定了四种基本约束，这四种基本约束如下所示：<br />WNDS [Writes no database state] 在函数内不能用DML语句修改数据库中的表。<br />RNDS [Reads no database state ] 在函数内不能通过SELECT语句来读取数据库中的表。<br />WNPS [Writes no package state ] 在函数内不能修改包变量(包变量不能在赋值语句的左边或一人FETCH语句的INTO语句中)。<br />RNPS [Reads no package state  ] 在函数内不能查询包变量(包变量不能在赋值语句的右边或不能是SQL表达式的一部分)。<br />当函数满足WNDS时，能够被SQL语句调用。<br />用户自定义函数必须符合如下约束才能被SQL语句调用，这些约束对于内嵌函数(系统提供的函数)也同样适用：<br />A.函数必须单独的或作为包的一部分存储在数据库中，不能作为块的一部分。<br />B.函数只能定义IN参数，不能定义其它两种参数。<br />C.形参类型必须是数据库中的数据类型，不能是PL/SQL中的数据类型(如boolean或record类型)。数据库类型包括number、char、varchar2、rowid、long、long raw和date。<br />D:函数返回的数据类型也必须是数据库中的数据类型。<br />例如，函数nameandsex将作家代码作为输入，返回作家的名字和性别：<br /><pre name="code" class="java">create or replace function nameandsex(
  p_authorcode auths.author_code%type)
  return varchar2 AS 
  v_nameandsex varchar2(100);
begin
  select name||' '||replace(replace(sex,0,'女'),1,'男')
    into v_nameandsex from auths where author_code=p_authorcode;
  return v_nameandsex;
end nameandsex;</pre>下面用SQL语句调用它：<br />select seqno,nameandsex(author_code) "姓名和性别" from auths where author_code&lt;'A00004'<br />当将单独存储在数据库中的函数用在SQL语句中时，PL/SQL引擎自动确定该函数有哪些约束，这些约束能否保证函数在SQL语句中的调用。<br />对于包函数，则先在包内部使用restrict_references编译指令来指定包函数的约束。在SQL语句中调用这个包函数时，PL/SQL根据编译指令指定的约束来判断包函数能否在SQL语句中调用。<br />restrict_references编译指令通过下面的语法指定函数的约束：<br />pragma restrict_references(function_name,WNDS[,WNPS][,RNDS][,RNPS]);<br />由于能在SQL语句中调用的函数都有WNDS基本约束，因此编译指令同样也要求这样。编译指令须在函数所在的包头中指定。<br /><pre name="code" class="java">create or replace package authorpack as
  function fun(p_authorcode auths.author_code%type) return varchar2;
  --使用　约束
  pragma restrict_references(fun,WNDS,WNPS,RNPS);
  
  function authorcount return number;
  pragma restrict_references(authorcount,WNDS,WNPS,RNPS);
end authorpack;
create or replace package body authorpack as
  v_num number;--包变量
  --函数fun的函数体满足WNPS、WNDS和RNPS约束。
  function fun(p_authorcode auths.author_code%type)
    return varchar2 as
    v_return varchar2(16);
  begin
    select author_code||name into v_return from auths where author_code=p_authorcode;
    return v_return;
  end fun;
  --函数authorcount的函数体不满足WNPS和RNPS约束。
  function authorcount return number as
    v_return number;
  begin
    if v_num is null then --包变量v_num被读，这将不满足RNPS约束。
      select count(*) into v_return from auths where author_code like 'A%';
      v_num:=v_return; --包变量被，这将不满足WNPS约束。
    else
      v_return:=v_num;
    end if;
    return v_return;
  end authorcount;
end authorpack;</pre><br />fun函数正常，但在包体中的authorcount函数代码并不符合指定的约束，包体中定义的变量v_num不仅被读也被修改，所以PL/SQL引擎编译到函数authorcount时，报"PLS-00452:Subprogram 'authorcount' violates its associated pragma"错误。<br />当遇到函数重载时，pragma只约束最过定义的函数。<br />注意，如果函数中用到了dbms_output、dbms_pipe、dbms_alter、dbms_sql、utl_file等系统包，则该函数不能用在SQL语句中。<br />当在过程性语句中调用一个函数时，可以使用参数缺省值。而通过SQL语句调用一个函数时，所有的参数都必须指定。另外，必须使用位置表示法，不能使用命名表示法。<br /><br />4、系统提供的包dbms_output
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/95153#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 28 Jun 2007 20:10:02 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/95153</link>
        <guid>http://owftc.javaeye.com/blog/95153</guid>
      </item>
      <item>
        <title>WEB移植时可能出现的问题</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/95039" style="color:red;">http://owftc.javaeye.com/blog/95039</a>&nbsp;
          发表时间: 2007年06月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、出现java.lang.NoSuchMethodError: java.math.BigDecimal.&lt;init>(I)V<br /><br />原因：JDK版本问题，如果是你的JAVA文件使用了java.math.BigDecimal类，并且将用JDK1.5编译后产生的class文件放进部署的环境(jdk1.4)，那么会出现上面异常<br /><br />二、待续...
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/95039#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 28 Jun 2007 12:44:54 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/95039</link>
        <guid>http://owftc.javaeye.com/blog/95039</guid>
      </item>
      <item>
        <title>PL/SQL存储过程与函数</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/94862" style="color:red;">http://owftc.javaeye.com/blog/94862</a>&nbsp;
          发表时间: 2007年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          存储过程与函数<br /><br />1、存储过程<br />存储过程的参数<br />形式参数和实际参数，例如，有如下一个存储过程，该过程接收一个作家代码和一个工资值，将该作家的工资改为接收到的工资值。<br /><pre name="code" class="java">create or replace procedure updateauths(
  p_authscode auths.author_code%type,
  p_authssalary auths.salary%type)
as
begin
  update auths set salary=p_authssalary where author_code=p_authscode;
  commit;
end updateauths;</pre>下面的PL/SQl块调用updateauths存储过程，将代码为A00011的作家的工资改为350元。<br /><pre name="code" class="java">declare
  v_authorcode auths.author_code%type:='A00011';
  v_salary auths.salary%type:=350;
begin
  updateauths(v_authorcode,v_salary);
end;</pre><br />v_authorcode、v_salary作为参数传递到存储过程updateauths中，这些参数是实际参数，简称实参。<br />p_authscode、p_authssalary就是形式参数，简称形参。<br />参数定义中，IN、OUT和IN OUT代表参数的三种不同模式：<br />IN：当调用存储过程时，该模式的形参接收对应实参的值，并且该是只读的，即不能被修改。默认为IN。<br />OUT：该形参被认为只能写，既只能为其赋值。在存储过程中不能读它的值。返回时，将该形参值传给相应的实参。<br />IN OUT：都允许。<br /><pre name="code" class="java">create or replace procedure updateauthssalary(
  p_author_code in out auths.author_code%type,
  p_salary in number,
  p_name out auths.name%type) is
  v_salary_temp number; --定义存储过程中的局部变量
begin
  select salary into v_salary_temp from auths where author_code=p_author_code;
  if v_salary_temp&lt;300 then
    update auths set salary=p_salary where author_code=p_author_code;
  end if;
  select name into p_name from auths where author code=p_author_code;
end updateauthssalary;</pre>(1)参数的数据类型<br />在定义一个存储过程参数时，不能指定CHAR类型和VARCHAR2类型形参的长度，也不能指定NUMBER形参的精度和标度。这些约束由实参来传递。<br />例如，下面的存储过程定义不合法，将产生一个编译错误：<br /><pre name="code" class="java">create or replace procedure proc_auths(
  --参数定义了类型长度，将产生编译错误。
  p_code in out varchar2(6),
  p_salary out number(8,2)) as
begin
  select salary into p_salary from auths where author_code=p_code;
end proc_auths;</pre>修改上面存储过程的定义为：<br /><pre name="code" class="java">create or replace procedure proc_auths(
  --参数定义了类型长度，将产生编译错误。
  p_code in out varchar2,
  p_salary out number) as
begin
  select salary into p_salary from auths where author_code=p_code;
end proc_auths;</pre><br />p_code的长度约束和p_salary的精度，标度约束由实参传递。<br /><pre name="code" class="java">delcare
  v_code varchar2(6);
  v_salary number(8,2);
begin
  v_code:='A00001';
  proc_auths(v_code,v_salary);
end;</pre>注意，如果使用%type为参数定义类型，那么该参数具有定义在形参上而不是通过实参传递的数据长度。<br /><pre name="code" class="java">create or replace procedure query_salary(
  p_code in out auths.author_code%type,
  p_salary out auths.salary%type) as</pre>--那么由于author_code的长度为6，因此p_code的长度也为6。<br />(2)参数的传值方式<br />位置表示法、名称表示法<br />如有这样的存储过程<br /><pre name="code" class="java">create or replace procedure insert_auths(
  p_code auths.author_code%type,
  p_name auths.name%type,
  p_sex auths.sex%type,
  p_birthdate auths.birthdate%type) as</pre>下面进行两种方法的调用：<br /><pre name="code" class="java">declare
  v_code varchar2(6);
  v_name varchar2(12);
  v_sex number(1);
  v_birthdate date;
begin
  v_code:='A00021';
  v_name:='张';
  v_sex:=1;
  v_birthdate:='5-seq-70';
  --实参的位置顺序与形参的位置顺序相对应。---位置表示法
  insert_auths(v_code,v_name,v_sex,v_birthdate);
  --实参名与形参名对应，这样就可以重新排列参数的先后顺序。---命名表示法
end;</pre>注意，位置表示法和命名表示法在一些调用中也可以混合使用。但是，如果出现第一个用命名表示法的参数时，后面的参数也必须使用命名表示法传值。<br />(3)参数的缺省值<br />如可以这样：<br />p_entry_date_time auths.entry_date_time%type:sysdate,<br />p_sex auths.sex%type default 1<br /><br /><br /><br />2、创建函数<br />函数与存储过程非常类似，都有三种模式的参数。它们都可以存储在数据库中(当然过程与函数也可以不在于数据库中)，并且在块中调用。<br />与存储过程不同，存储过程只能作为一个PL/SQL语句调用，而函数作为表达式的一部分调用。并且它们的定义、可执行、异常处理部分是不同的。<br />例如，如作家表中男作家或女作家的工资在200元以上的人数大于百分之七十，则下面的函数返回TRUE，否则返回FALSE：<br /><pre name="code" class="java">create or replace function salarystat(
  p_sex auths.sex%type)
  return boolean is
  v_currentsexauthors number;
  v_maxauthors number;
  v_returnvalue boolean;
  v_percent constant number:=70;
begin
  --获得满足条件的作家的最大数。
  select count(author_code) into v_maxauthors from auths where sex=p_sex and salary>=200;
  select count(author_code) into v_currentsexauthors from auths where sex=p_sex;
  if(v_maxauthors/v_currentsexauthors*100)>v_percent then
    v_returnvalue:=true;
  else
    v_returnvalue:=false;
  end if;
  return v_returnvalue;
end salarystat;</pre>下面进行调用：<br /><pre name="code" class="java">declare
  cursor c_auths is
    select distinct sex from auths;
begin
  for v_authsrecord in c_auths loop
    if salarystat(v_authsrecord.sex) then
      update auths set salary=salary-50 where sex=v_authsrecord.sex;
    end if;
  end loop;
end;</pre><br />return也可以用在存储过程中。在这种情况下，它没有参数。当执行了不带参数的return语句后，立刻将控制返回到调用环境，并将OUT和IN OUT模式的形参的当前值传给实参，然后继续执行调用存储过程后的语句。<br />在使用函数与存储过程时，一般情况下，如果只有一个返回值，则使用函数；如果有多个返回值则使用存储过程。尽管函数的参数可以是OUT模式，但是一般不这样使用。<br /><br />3、删除过程与函数<br />drop procedure procedurename;<br />drop function functionname;<br /><br />4、库存子程序和局部子程序<br />前面的子程序都是存储在数据库中的子程序，即库存子程序。这些子程序是由ORACLE命令创建的，并可在其它的PL/SQL块中调用。它们在创建时要进行编译，并将编译后的代码存储在数据库中。当子程序被调用时，编译后的代码从数据库中读出并执行。<br />一个子程序也可以在块的定义部分创建，这样的子程序被叫作局部子程序。<br />下面定义了一个局部函数formatname：<br /><pre name="code" class="java">declare
  cursor c_allauthors is
    select name,sex from auths;
  v_formattedname varchar2(60);
  function formatname(p_name in varchar2,p_sex in number)
    return varchar2 is
    v_sex varchar2(16);
  begin
    if p_sex=1 then
      v_sex:='男';
    else
      v_sex:='女';
    end if;
    return p_name||'('||v_sex||')';
  end formatname;
begin
  for v_authsrecord in c_allauthors loop
    v_formattedname:=
      formatname(v_authsrecord.name,v_authsrecord.sex);
    dbms_output.put_line(v_formattedname);
  end loop;
end;</pre>如上例，在无名块的定义部分创建了formatname函数。这个函数只在创建它的块中可用，它的作用域从创建它开始到结束。<br />局部子程序只能在定义部分的最后被创建，如果将formatname函数移到上面，将会出现编译错误。子程序必须先定义再引用。
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/94862#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Jun 2007 22:24:09 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/94862</link>
        <guid>http://owftc.javaeye.com/blog/94862</guid>
      </item>
      <item>
        <title>PL/SQL游标-(抄)</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/94091" style="color:red;">http://owftc.javaeye.com/blog/94091</a>&nbsp;
          发表时间: 2007年06月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          游标<br />环境区域是用来处理SQL语句的一个oracle存储区域。游标是指向它的指针或句柄。通过游标，PL/SQL程序可以控制这个环境区域中被处理的语句。<br />Oracle中的游标有两种：显式游标、隐式游标。<br />显示游标是用cursor...is命令定义的游标，它可以对查询语句(select)返回的多条记录进行处理，而隐式游标是在执行插入(insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。<br /><br />1、显式游标操作<br />显式游标在块定义部分、包或子程序中声明。当声明了显式游标后，可以通过以下三条命令控制显式游标的操作：打开游标、推进游标、关闭游标。<br />(1)声明显式游标<br />--例1<br /><pre name="code" class="java">declare
  v_auths auths%rowtype;
  v_code auths.author_code%type;
  cursor c_auths is 
    select * from auths where author_code=v_code;</pre>上例是将PL/SQL变量绑定在WHERE子句中，下面将游标参数绑定在游标的WHERE子句中：<br />--例2<br /><pre name="code" class="java">delcare
  cursor c_auths(p_code auths.author_code%type) is
    select * from auths where author_code=p_code;</pre><br />(2)打开显式游标<br />游标操作的第一步是打开游标。<br />例1，下面的语句是打开上节例1中声明的显式游标c_auths;<br /><pre name="code" class="java">begin
  --在打开游标前为绑定变量赋值。
  v_code:='A00001';
  --打开游标。
  open c_auths;</pre>例2，如果对于一个带参数的游标<br /><pre name="code" class="java">begin
  --打开游标时将参数传入。
  open c_auths('A00001');</pre>打开一个已打开的游标也是合法的。当第二次打开游标时，PL/SQL先自动关闭游标，然后再打开。一次打开多个游标也是PL/SQL所允许的。<br />(3)推进显式游标<br />当打开显式游标后，就可以使用FETCH语句来推进游标，返回查询结果集中的一行。每执行完一条FETCH语句后，显式游标会自动指向查询结果集的下一行。<br />(4)关闭显式游标<br />当整个结果集都检索完以后，应当关闭游标。关闭游标用来通知PL/SQL游标操作已经结束，并且释放游标所占用的资源(结果集所使用的资源空间)。<br /><br />2、游标的属性<br />游标有四个属性：%found、%notfound、%isopen和%rowcount。要注意这些属性只能使用在过程性语句中，而不能使用在SQL语句中。<br />表tableattribute，表中有两列column1(number类型)和column2(varchar2类型)，现在向表中插入两条记录：<br />insert into tableattribute values(10,'first');<br />insert into tableattribute values(20,'second');<br />...<br /><br />3、显式游标的推进循环<br /><pre name="code" class="java">delcare
  --声明一个变量，这个变量用来接收游标返回的结果集。
  v_salary auths.salary%type;
  v_code auths.author_code%type;
  /*声明游标，该游标的查询结果集是作家代码为"A00001"到"A00006"的工资值。*/
  cursor c_salary is select salary,author_code from auths where author_code&lt;='A00006';
begin
  --打开游标，并初始化结果集
  open c_salary;
  loop
    --推进游标，将游标的查询结果集中的一行存到变量v_salary中。
    fetch c_salary into v_salary,v_code;
    --当结果集中没有行时退出循环。
    exit when c_salary%notfound;
    --如果查询到的作家工资小于或等于200，则增加该作家的工资值。
    if v_salary&lt;=200 then
      update auths set salary=salary+50 where author_code=v_code;
    end if;
  end loop;
  --关闭游标，释放游标占用资源。
  close c_salary;
  --提交所做的修改。
  commit;
end;</pre>PL/SQL还提供了一种简单类型的循环，可以自动控制游标的打开、推进和关闭，叫做游标的FOR循环。<br /><pre name="code" class="java">delcare
  cursor c_salary is
    select salary form auths where author_code&lt;='A00006';
begin
  --开始游标FOR循环，隐含地打开c_salary游标。
  for v_salary in c_salary loop
    --一个隐含的fetch语句在这里被执行。
　　if v_salary.salary&lt;=200 then
      update auths set salary=salary+50 where salary=v_salary.salary;
    end if;
    --在循环继续前，一个隐含的c_auths%notfound被检测。
　end loop;
  --现在循环已经结束，c_auths游标的一个隐含的close操作被执行。
  commit;
end;</pre>使用current of cursor子句作为条件<br /><pre name="code" class="java">delcare
  --声明游标时在select语句中必须加for update of子句。
  cursor c_salary is
    select salary form auths where author_code&lt;'A00006' for update of salary;
begin
  for v_salary in c_salary loop
    if v_salary.salary&lt;=200 then
      --下面的update语句中的current of子句用来表明结果集的当前行。
    end if;
  end loop;
  commit;
end;</pre>如果在游标的FOR循环中使用子查询，则不用在块定义部分声明显式游标，在FOR循环中子查询隐含声明了一个显式游标。<br /><pre name="code" class="java">begin
  --在下面的FOR循环中隐含地声明了一个游标c_salary。
　for c_salary in
  (select salary form auths where author_code&lt;='A00006') loop
    if c_salary.salary&lt;=200 then
      update auths set salary=salary+50 where salary=c_salary.salary;
    end if;
  end loop;
  commit;
end;</pre><br /><br />4、隐式游标处理<br />PL/SQL隐式地打开SQL游标，并在它内部处理SQL语句，然后关闭它。SQL游标用来处理insert、update、delete以及返回一行的select...into语句。<br />一个SQL游标不管是打开还是关闭，open、fetch和close命令都不能操作它。SQL游标与显式游标类似，也有四个一样的属性。当打开SQL游标之前，SQL游标的属性都为NULL。<br /><pre name="code" class="java">begin
  update auths set entry_date_time=sysdate where author_code='A00017';
  --如果update语句中修改的行不存在(SQL%notfound返回值为true),则向auths表中插入一行。
  if sql%nofound then
    insert into auths(author_code,name,sex,birthdate,salary,entry_date_time)
      values('A000017','qiuys',1,'30-apr-40',88.5,sysdate);
  end if;
end;</pre>--如果update语句中修改的行不存在(sql%rowcount=0)<br /><pre name="code" class="java">declare
  v_birthdate date;
begin
  select birthdate into v_birthdate from auths where name='qiuys';
  --如果查询到一条记录，则删除该记录。
  if sql%found then
    delete from auths where name='qiuys';
  end if;
exception
  when no_data_found then
    dbms_output.put_line('该记录不存在');
  when too_many_rows then
    dbms_output_line('存在同名的作家');
end;</pre><br /><br /><br />5、游标变量<br />到目前为止前面所有显式游标的例子都是静态游标－即游标与一个SQL语句关联，并且该SQL语句在编译时已经确定。<br />而游标变量是一个引用类型(REF)的变量。<br />(1)游标变量的声明<br /><pre name="code" class="java">declare
  --使用%rowtype定义一个游标变量类型。
  type t_authsref is ref cursor return auths%rowtype;
  --定义一个记录类型。
  type t_coderecord is record(
    author_code article.author_code%type,
    article_code article.article_code%type);
  --声明一个记录类型的变量。
  v_code t_coderecord;
  --使用t_coderecord作为一个游标变量类型的结果集类型。
  type t_coderef is ref cursor return t_codeRecord;
  --使用v_code作为一个游标变量类型的结果集类型。
  type t_coderef2 is ref cursor return v_code%type;
  --使用上面的类型声明的两个游标变量。
  v_authcv t_authsref;
  v_codecv t_coderef;</pre>PL/SQL2.8以上版本中，可以使用一个没有指定结果集类型的游标变量来指定多个不同类型的查询。<br />type t_authsref if ref cursor;<br />v_cursorvar t_authsref;--声明一个该类型的变量。<br />(2)打开游标变量<br />为了将一个游标变更与一个具体的select语句联系起来，open的语法中增加了一个select语句。<br /><pre name="code" class="java">open cursor_variable for select_statement;
declare
  type t_authorsref is ref cursor return auths%rowtype;
  v_authscv t_authorsref;
  --然后打开
  open v_authscv for select * from auths;</pre>(3)推进游标变更<br />(4)关闭游标变更<br />该操作用来释放查询所占用的资源。但没有释放游标变量占用的存储空间。当变量超出作用域时，它所占用的空间才被释放掉。<br />下面的块中定义了一个没有指定结果集的游标变量，这样我们就可以使用这个游标变量指向不同的查询，并能够返回不同的记录类型：<br /><pre name="code" class="java">set serveroutput on size 100000 --设置存储缓冲区大小。
declare
  /*定义游标变更类型t_curref，该游标变量类型没有指定结果集类型，所以该游标变量类型的变量可以返回不同的PL/SQL记录类型。*/
  type t_curref is ref cursor;
  --声明一个游标变量类型的变量
  c_cursorref t_curref;
  --定义PL/SQL记录类型t_authorrec，该类型的变量用来接收游标变量的返回值。
  type t_authorrec is record(
    authorcode auths.author_code%type,
    name auths.name%type);
  --定义PL/SQL记录类型t_articlerec,该类型的变量也用来接收游标变量的返回值。
  type t_articlerec is record(
    authorcode article.author_code%type,
    title artitle.title%type);
  --声明两个记录类型变量。
  v_author t_authorrec;
  v_article t_articlerec;
begin
  --打开游标变量c_cursorref，返回t_authorrec类型的记录。
  open c_cursorref for 
    select author_code,name from auths where author_code in('A00001','A00002','A00003','A00004','A00005');
  --推进游标变量
  fetch c_cursorref into v_author;
  --游标变量的推进循环。
  while c_cursorref%found loop
    --将作家代码和相应的作家名字输出到屏幕上。
    dbms_output.put(v_author.authorcode||':'||v_author.name||' ');
    fetch c_cursorref into v_author;
  end loop;
  dbms_output.new_line;--向屏幕上输出一个回车行。
  --关闭游标变量，仅仅将游标变量指定的资源释放掉，游标变量本身的存储空间没有释放掉。
  close c_cursorref;
  --再次打开游标变量，返回t_articlerec类型的记录。
  open c_cursorref for 
    select author_code,title from article
    where author_code in('A00001','A00002','A00003','A00004','A00005');
  fetch c_cursorref into v_article;
  while c_cursorref%found loop
    ...
  end loop;
  close c_cursorref;
end;</pre>注意，在上例中，第一次关闭游标变量是可省略的，因为在第二次打开游标变量时，就将第一次的查询丢失掉了。而且游标变量也有游标属性，通常在推进游标变量时使用这些游标属性，例如上例使用了%found属性。
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/94091#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 25 Jun 2007 21:42:22 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/94091</link>
        <guid>http://owftc.javaeye.com/blog/94091</guid>
      </item>
      <item>
        <title>PL/SQL中的流控制语句-(抄)</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/94090" style="color:red;">http://owftc.javaeye.com/blog/94090</a>&nbsp;
          发表时间: 2007年06月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          PL/SQL中的流控制语句<br />选择控制语句(IF语句)<br />循环控制语句(LOOP语句和EXIT语句)<br />顺序控制语句(GOTO语句和NULL语句)<br /><br />1、选择控制语句<br /><pre name="code" class="java">if...then
  if 条件 then
    语句;
  end if;
if...then...else
if...then...elsif</pre><br /><br />2、循环控制语句<br />LOOP   WHILE...LOOP   FOR...LOOP<br />(1)LOOP<br />EXIT语句可以在LOOP语句中出现多次，但不可以在LOOP语句外使用。有两种格式的EXIT语句：<br />EXIT：无条件地强迫终止循环；EXIT...WHEN：根据条件的值来终止循环。<br /><pre name="code" class="java">delcare
  v_name varchar2(10);
  v_num integer:=1;
begin
  loop
    select name into v_name from auths where author_code='A0000'||to_char(v_num);
    v_num:=v_num+1;
    exit when v_num>=10;
  end loop;
end;</pre>带标号的循环语句<br />(2)while...loop<br /><pre name="code" class="java">while 条件 loop
  语句;
end loop;</pre><br />(3)for...loop<br /><pre name="code" class="java">for 循环变量 in[reverse] 初始值...结束值 loop
  语句;
end loop;</pre>循环变量可以出现在语句表达式中，但是不能对其赋值。<br />循环变量的初始值和结束值可以是数据、变量或表达式，但值必须是整数。<br />允许在执行时动态指定循环变量的初始值和结束值。<br />循环变量仅在循环语句中有效，当退出循环时，循环变量无效。<br />因为循环变量被隐匿地定义为局部变量，所以任何同名的全局变量都将被该变量覆盖。如果要引用全局变量，则必须使用标号和点号。<br /><pre name="code" class="java">&lt;&lt;global>>
declare
  v_name varchar2(10);
  v_num integer:=8;
  v_count integer;
begin
  select count(name) into v_count from auths;
  for v_num in 1...v_count loop
    select name into v_name from auths where author_code='A0000'||to_char(v_num);
    dbms_output.put_line(v_name);
    if v_num>global.v_num then
      exit;
    end if;
  end loop;
end global;</pre>如果在嵌套的循环语句中，内层和外层的循环变量名相同，这时要在内部循环中使用外部循环的循环变量，必须使用标号和点号。<br /><pre name="code" class="java">delcare
  ...
begin
  &lt;&lt;out_loop>>
  for v_num in 1...100 loop
    ...
    for v_num in 1...100 loop
      ...
      if out_loop.v_num=v_num then
        ...
      end if;
    end loop;
  end loop;
end;</pre><br /><br />3、顺序控制语句<br />和前面介绍两种语句相比，GOTO语句和NULL语句在PL/SQL编程中并不重要。<br />因为GOTO语句是非结构化语句，所以在PL/SQL程序中很少用到GOTO语句。<br />NULL语句用于显式地指定一个什么也不做的操作，相当于一个占位符。尽管NULL语句不执行任何操作，但是NULL语句能够使语句的意义更加清晰，并且能够提高程序的可读性。<br /><pre name="code" class="java">declare
  v_salary number(8,2);
begin
  select salary into v_salary from auths where author_code='A00008';
  if v_salary if null then
    update auths set salary=600 where author_code='A00008';
  elsif v_salary&lt;=500 then
    update auths set salary=800 where author_code='A00008';
  else
    null; --不做任何处理。
  end if;
end;</pre>
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/94090#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 25 Jun 2007 21:39:14 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/94090</link>
        <guid>http://owftc.javaeye.com/blog/94090</guid>
      </item>
      <item>
        <title>PL/SQL ---概要</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/93524" style="color:red;">http://owftc.javaeye.com/blog/93524</a>&nbsp;
          发表时间: 2007年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">PL/SQL(Procedural Language/SQL)是在标准SQL的基础上增加了过程化处理的语言，是Oracle对SQL的扩充。

SQL(Structured Query Language)是一种对关系数据库管理系统(RDBMS)进行操作的标准结构化语言，它用来设置、使用和维护关系数据库。

PL/SQL正是一种增加了过程化概念的SQL语言，它有以下一些标准SQL所没有的特征：
变量(包括预先定义的和自定义的)、控制结构(IF-THEN-ELSE)、自定义的存储过程和函数、对象类型</pre><br /><br /><span style="color: brown">PL/SQL特性<br />1、块结构<br />块是PL/SQL程序的基本执行单元，所有的PL/SQL程序都是由块组成的。每个块完成程序中的部分工作，这样就<br /><br />可将程序分成多个块。<br />DECLARE<br />  /*块定义部分，这儿可定义PL/SQL变量、自定义类型、游标和局部子程序。这部分是块中可选部分。*/<br />BEGIN<br />  /*块中执行部分，这里放置一些可执行的SQL或PL/SQL语句。这儿必须至少包含一条可执行语句。*/<br />EXCEPTION<br />  /*异常处理部分，这里放置对错误进行处理的语句。这部分是块中可选部分*/<br />END;<br />2、变量与常量<br /><br />3、循环结构<br />create table Table_A(<br />  num_col NUMBER,<br />  char_col VARCHAR2(60));<br />___<br />declare<br />  v_LoopCounter BINARY_INTEGER:=1;<br />begin<br />  loop<br />    insert into Table_A(num_col) values(v_LoopCounter);<br />    v_LoopCounter:=v_LoopCounter+1;<br />    exit when v_LoopCounter>10;<br />  end loop;<br />end;<br />___<br />declare<br />  v_LoopCounter BINARY_INTEGER:=1;<br />begin<br />  for v_LoopCounter in 1..10 loop<br />    insert into Table_A(num_col) values(v_LoopCounter);<br />  end loop;<br />end;<br /><br /><span style="font-size: 18pt">4、游标</span><br />游标用来查询数据库中的数据，并对查询的结果进行处理。<br />  num_col NUMBER,<br />  char_col VARCHAR2(60)<br />__<br />declare<br />  v_num number;<br />  v_char varchar2(60);<br />  --游标定义。<br />  cursor c_tablea is<br />    select num_col,char_col from table_a;<br />begin<br />  open c_tablea;--打开游标。<br />  loop<br />    --检索一条记录<br />    fetch c_tablea into v_num,v_char;<br />    --当所有的记录都被检索出后退出循环。<br />    exit when c_tablea%notfound;<br />    /*对检索出来的数据进行处理。*/<br />  end loop;<br />  --结束处理<br />  close c_tablea;<br />end;</span><br /><br /><br /><span style="color: blue">块的分类<br />块可以分为以下四类：<br /><br />一、无名块：动态构造并只能执行一次。<br />--set SERVEROUTPUT on size 10000 --设置存储缓存区的大小。<br />declare<br />  /*声明在块中要用到的变量。*/<br />  v_TypeCode1 number:=200;<br />  v_TypeCode2 number:=201;<br />  v_TypeRemark1 varchar2(60):='Computer';<br />  v_TypeRemark2 varchar2(60):='C++ Language';<br />  v_OutPut varchar2(60);<br />begin<br />  /*利用变量的值向表中插入两行。*/<br />  insert into table_a values(v_TypeCode1,v_TypeRemark1);<br />  insert into table_a values(v_TypeCode2,v_TypeRemark2);<br />  /*查询刚插入表中的两行，并使用DBMS_OUTPUT包输出结果。*/<br />  select char_col into v_Output from table_a where num_col=v_TypeCode1;<br />  DBMS_OUTPUT.put_line(v_output); --将结果显示在屏幕上。<br />end inserttype;<br /><br />二、命名块：前面加了标号的无名块。<br />declare前加&lt;&lt;inserttype>><br /><br />三、子程序：包括存储在数据库中的存储过程、函数和包等。这些块一旦被定义后，便可随时调用。<br />--创建存储过程inserttype<br />create or replace procedure inserttype as<br />  /*声明在块中要用到的变量。*/<br />  v_TypeCode1 number:=200;<br />  v_TypeCode2 number:=201;<br />  v_TypeRemark1 varchar2(60):='Computer';<br />  v_TypeRemark2 varchar2(60):='C++ Language';<br />  v_OutPut varchar2(60);<br />begin<br />  /*利用变量的值向表中插入两行。*/<br />  insert into table_a values(v_TypeCode1,v_TypeRemark1);<br />  insert into table_a values(v_TypeCode2,v_TypeRemark2);<br />  /*查询刚插入表中的两行，并使用DBMS_OUTPUT包输出结果。*/<br />  select char_col into v_Output from table_a where num_col=v_TypeCode1;<br />  DBMS_OUTPUT.put_line(v_output); --将结果显示在屏幕上。<br />end inserttype;<br />当将无名块中的关键字declare改变成关键字create or replace procedure时，该无名块就变成了存储过程。<br /><br />注意，在END关键字后必须加存储过程名。<br /><br />四、触发器：它是存储在数据库中的块。这些块一旦被构造后，就可以多次执行。当触发它的事件发生时调用<br /><br />该触发器。触发事件是指对表中数据的操作，如插入、删除和修改。<br />--创建触发器salary_trigger<br />create or replace trigger salary_trigger<br />  --当向table_a表中插入一行或修改一行后激活触发器。<br />  before insert or update of num_col on table_a for each row<br />begin<br />  --如果插入值或修改值大于10000时，报告应插入值<br />  --并产生异常，退出该触发器。<br />  if:new.num_col>10000 then<br />    raise_application_error(-200060,'插入值应小于10000!');<br />  end if;<br />end salary_trigger;</span><br /><br /><br />变量名<br />PL/SQL不区分大小<br /><br /><br /><span style="color: brown"><br />数据类型<br />系统提供四种数据类型：标量类型、复合类型、引用类型和LOB类型。<br />一、标量类型：numeric character raw rowid date boolean trusted<br />1、numeric类用来存放整数、实数和浮点数。包括binary_integer number pls_integer<br />  binary_integer类型用于存储带符号的整数，取值范围为-2147483647~2147483647。pls_integer值和<br /><br />binary_integer值比number值占用较少的存储空间。但是，binary_integer操作较pls_integer操作慢。<br />  number类型可以存储定点数和浮点数，取值范围为1.0#-130~9.99E125。<br />定点数number(precision,scale) number(4,2) 12.345 -> 12.35<br />整型数number(precision) 其中precision为精度。<br />定义浮点数number这是一个精度为38位的十进制浮点数。<br />  pls_interger类型用于存储带符号的整数，取值范围与binary_integer的取值范围相同。<br />2、character类的变量用来存放字符串，类型有：char varchar2 long nchar nvarchar2<br />  char类型用来存放固定长度的字符数据，数据的内部表示取决于当前数据库的字符集。char(n)类型的变量<br /><br />用于存储多字节字符，则它的最大长度小于n字符，如果数据不满n个字符，则末尾用空格填充。经测试，如果<br /><br />是char类型，在执行sql时会自动将空格trim处理。可以说character是char的别名。最大长度为2000个字节。<br />  varchar2是变长字符类型。最大长度不能大于4000字节。<br />  long类型用于存储可变长字符数据，最大长度为32760字节。<br />  nchar<br />  nvarchar<br />3、raw类，包括raw、long raw<br />  raw用来存放固定长度的二进制数据。RAW类型类似于character类型，不同点在于将raw类型从一个系统转换<br /><br />到另一个系统时，Net8不能进行相应的字符集转换。最大长度2000字节。<br />  long raw最大长度是32760字节。<br />4、rowid类，每个数据库都有一个rowid伪列，用于存储行标识符，行标识符是固定长度的十六进制字符串，<br /><br />用来表示一条记录的存储地址。<br />5、date类型用于存储长度固定的日期和时间值。日期的缺省值是当月的第一天，时间的缺省值为午夜12:00<br />PL/SQL中的DATE变量与数据库中DATE类型的列相同。<br />6、boolean类型用于存储逻辑值：true、false和null。null用来表示一个错误的、不合适的或不确定的值。<br />boolean类型的变量只能用在逻辑操作中，不能将该类型的值插入到数据库中。DB中不存储这一类型的值。<br />7、trusted类型的变量被用在Trusted Oracle中存储变长的二进制标签。<br /><br /><br /><br />数据类型之间的转换<br />1、强制类型转换，通过使用函数来完成不同类型之间的转换。这些函数也可以是标准SQL中数据类型转换函数<br />to_char将numeric或date类型值转换成varchar2类型值<br />to_date将character类型值转换成date类型值<br />to_number将character类型值转换成number类型值<br />2、自动类型转换<br />PL/SQL能够自动将一些类型的数据转换成另外一种类型的数据。<br />如可将numeric类数据自动转换成字符串并赋给character类的变量。<br /><br /><br />复合类型：指具有内部成员的类型，该成员可以被单独操作。包括：记录、表。<br />1、记录<br />(1)下面首先定义一个关于作家文章信息的记录类型t_ArticleRec，然后声明了两个类型的变量v_Article1和<br /><br />v_Article2；<br />declare<br />  type t_ArticleRec is record(<br />    ArticleCode varchar2(10),<br />    --在下面的域声明中，用关键字default代替了":="<br />    Secrate_level char(1) default '1',<br />    --下面的变量有not null约束，所以必须赋初值<br />    title varchar2(120) not null :='not know'<br />  );<br />  --两个类型的变量v_Article1和v_Article2<br />  v_Article1 t_ArticleRec;<br />  v_Article2 t_ArticleRec;<br />begin<br />  v_Article1.Articlecode:='AS6';<br />  v_Article2.Title:='C++ Programing';<br />end;<br />(2)、前面已定义的记录类型为t_ArticleRec的两个变量v_Article1、v_Article2可以互相赋值：<br />   v_Article1:=v_Article2;<br />(3)可以用select语句来为记录赋值，这里需注意，记录中域的类型一定要和select列表中域的类型一致：<br />declare<br />  --定义一个记录，它的域和auths表中的一些域类型相同。<br />  type t_AuthRec is record(<br />    authorcode auths.author_code%type,<br />    name auths.name%type,<br />    birthdate auths.birthdate%type,<br />    entrydatetime auths.entry_date_time%type<br />  );<br />  --声明一个记录类型变量来接收数据。<br />  v_author t_authrec;<br />begin<br />  --检索作家代码是A00009的作家信息，并将其存入v_author记录变量中。<br />  select author_code,name,birthdate,entry_date_time into v_author from auths<br />    where author_code='A00009';<br />end;<br />(4)、PL/SQL中经常会遇到这样的声明－声明一个与数据库表中各列类型相同的记录。为了简化这种记录的声<br /><br />明,PL/SQL提供了%ROWTYPE操作符，其返回一个记录类型，这个记录类型中域类型与定义该记录的表中各列的<br /><br />类型相同。下面定义了一个与表article相同的记录：<br />  declare<br />    v_article article%rowtype;<br />但是这里%rowtype声明的记录不包括数据库表中列的not null约束，但包括其它如长度、精度、标度。<br /><br />2、表<br />(1)先定义两个表类型t_nametable、t_address，然后分别声明这两种类型的变量：<br />declare<br />  --定义表类型t_nametable，其元素类型是auths数据库表中name列的类型。<br />  type t_nametalbe is table of auths.name%type index by binary_integer;<br />  --定义表类型t_address<br />  type t_addresstable is table of auths.address%type index by binary_integer;<br />  --声明两个表类型变量<br />  v_name t_nametable;<br />  v_address t_addresstable;<br />--为表元素赋值<br />begin<br />  v_name(2):='wang';<br />  v_address(-3):='street 1';<br />end;<br />(2)下面定义一个记录表t_authorrecord，表元素类型是与数据库表auths匹配的记录类型，然后检索数据库表<br /><br />auths中作家代码是"A00009"的作家记录，并将其存放到创建的t_authorrecord中：<br />declare<br />  type t_authorrecord is table of auths%rowtype index by binary_integer;<br />  --每一个元素都是一条记录<br />  v_auths t_authorrecord;<br />begin<br />  --检索作家代码是A00009的作家，并存放到v_auths(00009)中。<br />  select * into v_auths(00009) from auths where author_code='A00009';<br />  v_auths(00009).name:='Join';<br />end<br />......<br /><br /><br /><br /><br />引用类型<br />PL/SQL中的引用类型变量与C中的指针类似，该类型用于存储指向存储空间的指针。包括游标变量(ref <br /><br />cursor)和对象引用类型(ref object type)<br /><br /><br />lob类型<br />lob类型用来存储大对象<br /><br />用户自定义子类型</span>
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/93524#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 23 Jun 2007 22:17:28 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/93524</link>
        <guid>http://owftc.javaeye.com/blog/93524</guid>
      </item>
      <item>
        <title>应该养成的习惯-(转)</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/93389" style="color:red;">http://owftc.javaeye.com/blog/93389</a>&nbsp;
          发表时间: 2007年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          要成功，就马上准备有所付出吧！这就是每天你应该养成的习惯。 <br />1、不说“不可能”； <br />2、凡事第一反应： 找方法，不找借口； <br />3、遇到挫折对自己说声：太好了，机会来了！ <br />4、不说消极的话，不落入消极的情绪，一旦发生立即正面处理； <br />5、凡事先订立目标； <br />6、行动前，预先做计划； <br />7、工作时间，每一分、每一秒做有利于生产的事情； <br />8、随时用零碎的时间做零碎的事情； <br />9、守时； <br />10、写点日记，不要太依靠记忆； <br />11、随时记录想到的灵感； <br />12、把重要的观念、方法写下来，随时提示自己； <br />13、走路比平时快30%，肢体语言健康有力，不懒散、萎靡； <br />14、每天出门照镜子，给自己一个自信的微笑； <br />15、每天自我反省一次； <br />16、每天坚持一次运动； <br />17、听心跳一分钟，在做重要的事情，疲劳时，紧张时，烦躁时。。。。 <br />18、开会做前排； <br />19、微笑； <br />20、用心倾听，不打断对方的话； <br />21、说话有力，感觉自己的声音能产生感染力的磁场； <br />22、说话之前，先考虑一下对方的感觉； <br />23、每天有意识赞美别人三次以上； <br />24、即使表示感谢，如果别人帮助了你的话； <br />25、控制住不要让自己作出为自己辩护的第一反应； <br />26、不用训斥、指责的口吻与别人说话； <br />27、每天做一件”分外事“； <br />28、不关任何方面，每天必须至少做一次”进步一点点“，并且有意识的提高； <br />29、每天提前15分上班，推迟30分下班； <br />30、每天下班前5分钟做一下今天的整理工作； <br />31、定期存钱； <br />32、节俭； <br />33、时常运用”头脑风暴“，利用脑力激荡提升自己创新能力； <br />34、恪守诚信； <br />35、学会原谅
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/93389#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 23 Jun 2007 11:23:12 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/93389</link>
        <guid>http://owftc.javaeye.com/blog/93389</guid>
      </item>
      <item>
        <title>websphere6 ejb本地调用没有成功--mark</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/93166" style="color:red;">http://owftc.javaeye.com/blog/93166</a>&nbsp;
          发表时间: 2007年06月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          用Jbuilder工具自动生成EJB(local/remote)，部署到websphere6下，<br />用远程调用可以，本地调用怎么试都不行。<br /><br /><br />也参考了一堆文章，都不管用。<br /><br /><a href="http://blog.csdn.net/lcllcl987/archive/2006/10/30/1357368.aspx" target="_blank">http://blog.csdn.net/lcllcl987/archive/2006/10/30/1357368.aspx</a><br /><br /><br /><br />不管用...
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/93166#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 22 Jun 2007 14:36:57 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/93166</link>
        <guid>http://owftc.javaeye.com/blog/93166</guid>
      </item>
      <item>
        <title>jbuilder集成websphere让人郁闷...</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/92513" style="color:red;">http://owftc.javaeye.com/blog/92513</a>&nbsp;
          发表时间: 2007年06月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.先是用jbuilder2006与websphere6，不过一启动就报错，也不知是什么原因，<br />[07-6-20 22:03:27:343 CST] 0000000a WsServerImpl  E   WSVR0008E: 读 META-INF/ws-server-components.xml 时出错<br />com.ibm.ws.exception.ConfigurationError: couldnt register ComponentManager<br />...<br />找不到解决办法，不知谁能帮忙解决？？？<br /><br /><br /><br />2.后面只好采用websphere5.1，用jbuilder2005跟2006是一样的，启动websphere服务后(System.out)出来的记录都打到websphere自己的日志SystemOut.log中，没有在JB控制台里面出现，可能是websphere对System.out做了重定向处理了，不过页面启动没有成功。感觉tomcat+JB做调整非常爽快，用websphere+JB调整这么痛苦。<br />还是说这种组合很好用是我自己不会用？？？<br /><br />后面就瞎搞试试<br />比如WEB应用是WebModule1，<br />我把web Module的Directory设为：C:/Program Files/IBM5.1/WebSphere/AppServer/installedApps/wt-a0503e227d3b/WebModule1_war.ear/WebModule1.war<br />就可以调试了。<br />但是别把Archive目录也改在websphere那个目录下，不然会弄得什么都不见了。<br /><br />不过如果要给应用修改web.xml，重启后都不起作用，必须还是要在这个目录更新一下web.xml<br />C:\Program Files\IBM5.1\WebSphere\AppServer\config\cells\wt-a0503e227d3b\applications\WebModule1_war.ear\deployments\WebModule1_war\WebModule1.war\WEB-INF<br /><br /><br />websphere跟JB又都那么耗内存，就折腾吧...
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/92513#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Jun 2007 22:30:55 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/92513</link>
        <guid>http://owftc.javaeye.com/blog/92513</guid>
      </item>
      <item>
        <title>websphere下部署servlet问题（不打包，直接更新已有应用）</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/92129" style="color:red;">http://owftc.javaeye.com/blog/92129</a>&nbsp;
          发表时间: 2007年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本来只是在C:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv02\installedApps\wt-a0503e227d3bNode02Cell\WebModule1_war.ear\WebModule1.war\WEB-INF这个目录底下更新class与web.xml<br />但是经过测试都不成功，<br /><br />然后baidu一下，需要在WebSphere\AppServer\profiles\AppSrv02\config\cells\wt-a0503e227d3bNode02Cell\applications\WebModule1_war.ear\deployments\WebModule1_war\WebModule1.war\WEB-INF更新一下web.xml，测试一下果然可以！！！<br /><br />说明需要更新两个web.xml?<br />网上一种解释： 修改webapp下的web.xml没有什么作用。   <br />实际上我觉得websphere好像启动时从\config\cells下边取出web.xml,然后同步到webapp目录下<br /><br /><br />也不知websphere搞啥
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/92129#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Jun 2007 17:57:43 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/92129</link>
        <guid>http://owftc.javaeye.com/blog/92129</guid>
      </item>
      <item>
        <title>websphere下struts的form传递乱码</title>
        <author>qiuyuanshan</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://owftc.javaeye.com">qiuyuanshan</a>&nbsp;
          链接：<a href="http://owftc.javaeye.com/blog/91924" style="color:red;">http://owftc.javaeye.com/blog/91924</a>&nbsp;
          发表时间: 2007年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本以为用一个过滤器就可以了，但是不行，<br />后面去改websphere中JDK配置参数，加-Dfile.encoding=GBK，但是还是不行<br />再后面在JDK参数后面再加 -Ddefault.client.encoding=GBK，重启服务，后form传递就正常了。<br /><br /><br />websphere为啥就是与众不同...
          <br/>
          <span style="color:red;">
            <a href="http://owftc.javaeye.com/blog/91924#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Jun 2007 13:43:25 +0800</pubDate>
        <link>http://owftc.javaeye.com/blog/91924</link>
        <guid>http://owftc.javaeye.com/blog/91924</guid>
      </item>
  </channel>
</rss>