??xml version="1.0" encoding="utf-8" standalone="yes"?> W一步: 在http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.6 首先我们先介l一下ؓ什么要?Apache ?Tomcat 之间q行q接。事实上 Tomcat 本n已经提供?HTTP 服务Q该服务默认的端口是 8080Q装?tomcat 后通过 8080 端口可以直接使用 Tomcat 所q行的应用程序,你也可以该端口改ؓ 80?/p>
既然 Tomcat 本n已经可以提供q样的服务,我们Z么还要引?Apache 或者其他的一些专门的 HTTP 服务器呢Q原因有下面几个Q?/p>
1. 提升寚w态文件的处理性能 2. 利用 Web 服务器来做负载均衡以及容?/p>
3. 无缝的升U应用程?/p>
q三点对一?web |站来说是非怹重要的,我们希望我们的网站不仅是速度快,而且要稳定,不能因ؓ某个 Tomcat 宕机或者是升E序D用户讉K不了Q而能完成q几个功能的、最好的 HTTP 服务器也只?apache ?http server 了,它跟 tomcat 的结合是最紧密和可靠的?/p>
接下来我们介l三U方法将 apache ?tomcat 整合在一赗?/p>
q是最常见的方式,你可以在|上扑ֈ很多关于配置JK的网,当然最全的q是其官Ҏ提供的文档。JK 本n有两个版本分别是 1 ?2Q目?1 最新的版本?1.2.19Q而版?2 早已l废弃了Q以后不再有新版本的推出了,所以徏议你采用版本 1?/p>
JK 是通过 AJP 协议?Tomcat 服务器进行通讯的,Tomcat 默认?AJP Connector 的端口是 8009。JK 本n提供了一个监控以及管理的面 jkstatusQ通过 jkstatus 可以监控 JK 目前的工作状态以及对?tomcat 的连接进行设|,如下图所C: 在这个图中我们可以看到当前JK配了两个q接分别?8109 ?8209 端口上,目前 s2 q个q接是停止状态,?s1 q个q接自上ơ重启后已经处理?47 万多个请求,量辑ֈ 6.2 ?GQ最大的q发数有 13 {等。我们也可以利用 jkstatus 的管理功能来切换 JK C同的 Tomcat 上,例如?s2 启用Qƈ停用 s1Q这个在更新应用E序的时候非常有用,而且整个切换q程对用h说是透明的,也就辑ֈ了无~升U的目的。关?JK 的配|文章网上已l非常多了,q里我们不再详细的介l整个配|过E,但我要讲一下配|的思\Q只要明白了配置的思\QJK 是一个非常灵zȝlg?/p>
JK 的配|最关键的有三个文gQ分别是
httpd.conf
workers.properties
uriworkermap.properties
其中W二、三个配|文件名都可以自定义。下面是一个典型的 httpd.conf ?JK 的配|?/p>
接下来我们在 Apache ?conf 目录下新Z个文件分别是 workers.properties、uriworkermap.properties。这两个文g的内容大概如?/p>
以上?workers.properties 配置是我们前面那个屏幕抓图的页面所用的配置。首先我们配|了两个cd?ajp13 ?worker 分别?s1 ?s2Q它们指向同一台服务器上运行在两个不同端口 8109 ?8209 ?Tomcat 上。接下来我们配置了一个类型ؓ lbQ也是负蝲均衡的意思)?workerQ它的名字是 DLOG4JQ这是一个逻辑?workerQ它用来理前面配置的两个物理连?s1 ?s2。最后还配置了一个类型ؓ status ?workerQ这是用来监?JK 本n的模块。有了这三个 worker q不够,我们q需要告?JKQ哪?worker 是可用的Q所以就?worker.list = DLOG4J, status q行配置?/p>
接下来便?URI 的映配|了Q我们需要指定哪些链接是?Tomcat 处理的,哪些是由 Apache 直接处理的,看看下面q个文g你就能明白其中配|的意义 怿你已l明白了一大半了:所有的h都由 DLOG4J q个 worker q行处理Q但是有几个例外Q?jkstatus h?status q个 worker 处理。另外这个配|中每一行数据前面的感叹h什么意思呢Q感叹号表示接下来的 URI 不要?JK q行处理Q也是 Apache 直接处理所有的囄、css 文g、js 文g以及静?html 文本文g?/p>
通过?workers.properties ?uriworkermap.properties 的配|,可以有各U各Ll合来满x们前面提出对一?web |站的要求。您不妨动手试试Q?/p>
q是利用 Apache 自带?mod_proxy 模块使用代理技术来q接 Tomcat。在配置之前L保是否用的?2.2.x 版本?Apache 服务器。因?2.2.x 版本对这个模块进行了重写Q大大的增强了其功能和稳定性?/p>
http_proxy 模式是基?HTTP 协议的代理,因此它要?Tomcat 必须提供 HTTP 服务Q也是说必d?Tomcat ?HTTP Connector。一个最单的配置如下 在这个配|中Q我们把所?http://localhost 的请求代理到 http://localhost:8080/ Q这也就?Tomcat 的访问地址Q除?images、css、js 几个目录除外。我们同样可以利?mod_proxy 来做负蝲均衡Q再看看下面q个配置 配置?JK 单多了,而且它也可以通过一个页面来监控集群q行的状态,q做一些简单的l护讄?/p>
ajp_proxy q接方式其实?http_proxy 方式一P都是?mod_proxy 所提供的功能。配|也是一P只需要把 http:// 换成 ajp:// Q同时连接的?Tomcat ?AJP Connector 所在的端口。上面例子的配置可以改ؓQ?/p>
采用 proxy 的连接方式,需要在 Apache 上加载所需的模块,mod_proxy 相关的模块有 mod_proxy.so、mod_proxy_connect.so、mod_proxy_http.so、mod_proxy_ftp.so、mod_proxy_ajp.soQ?其中 mod_proxy_ajp.so 只在 Apache 2.2.x 中才有。如果是采用 http_proxy 方式则需要加?mod_proxy.so ?mod_proxy_http.soQ如果是 ajp_proxy 则需要加?mod_proxy.so ?mod_proxy_ajp.soq两个模块?/p>
相对?JK 的连接方式,后两U在配置上是比较单的Q灵zL方面也一炚w不逊色。但q定性而言׃?JK q样久经考验Q毕?Apache 2.2.3 推出的时间ƈ不长Q采用这U连接方式的|站q不多,因此Q如果是应用于关键的互联|网站,q是采用 JK 的连接方式?/p>
在Java语言中,equals()和hashCode()两个函数的用是紧密配合的,你要是自p计其中一个,p设计另外一个。在多数情况 下,q两个函数是不用考虑的,直接使用它们的默认设计就可以了。但是在一些情况下Q这两个函数最好是自己设计Q才能确保整个程序的正常q行。最常见的是?一个对象被加入攉对象Qcollection objectQ时Q这两个函数必须自己设计。更l化的定义是Q如果你惛_一个对象A攑օ另一个收集对象B里,或者用这个对象A为查找一个元对象在收集对 象B里位|的钥匙Qƈ支持是否容纳Q删除收集对象B里的元对象这L操作Q那么,equals()和hashCode()函数必须开发者自己定义。其他情 况下Q这两个函数是不需要定义的?/p>
equals():
它是用于q行两个对象的比较的Q是对象内容的比较,当然也能用于q行对象参阅值的比较。什么是对象参阅值的比较Q就是两个参阅变量的值得比较Q我?都知道参阅变量的值其实就是一个数字,q个数字可以看成是鉴别不同对象的代号。两个对象参阅值的比较Q就是两个数字的比较Q两个代L比较。这U比较是?认的对象比较方式Q在Objectq个对象中,q种方式已l设计好了。所以你也不用自己来重写Q浪费不必要的时间?/p>对象内容的比较才是设计equals()的真正目的,Java语言对equals()的要求如下,q些要求是必遵循的。否则,你就不该费旉Q?
如果你在设计时想别出心裁Q不遵守以上的两套规则,那么劝你q是不要做这h入非非的事。我q没有遇到过哪一个开发者和我说设计q两个函数要q背前面说的两个规则Q我到q些q反规则的情冉|Q都是作计错误处理?/p> 当一个对象类型作为收集型对象的元对象Ӟq个对象应该拥有自己处理equals()Q和/或处理hashCode()的设计,而且要遵守前面所?的两U原则。equals()先要查null和是否是同一cd。查同一cd是ؓ了避免出现ClassCastExceptionq样的异常给丢出来。查 null是ؓ了避免出现NullPointerExceptionq样的异常给丢出来?/p>如果你的对象里面容纳的数据过多,那么q两个函?equals()和hashCode()会变得效率低。如果对象中拥有无法serialized的数据,equals()有可能在操作中出现错误。想?一个对象xQ它的一个整型数据是transient型(不能被serialize成二q制数据)。然而equals()和hashCode()都有依靠 q个整型数据Q那么,q个对象在serialization之前和之后,是否一P{案是不一栗因为serialization之前的整型数据是有效?数据Q在serialization之后Q这个整型数据的值ƈ没有存储下来Q再重新׃q制数据{换成对象后,两者(对象在serialization 之前和之后)的状态已l不同了。这也是要注意的?br /> IE ?strong>事gl定函数?strong> attachEventQ?Firefox, Safari ?addEventListenerQOpera 则两U都支持。用jQuery可以用简单的bind()Q或?().click()之类的函数解冻I而如果不使用JavaScript框架的时候,大家可是使用下面的封装bind()函数。 ?
例如ldocumentd一个点M件 ? unbind()对于上面的bind()函数 例如删除W一个绑定的document点击事gQ?br />unbind(document,"click",fn); 一、动态向表中d?/p>
二、动态设|元素style属?/p>
三、动态设|元素的Class属?/p>
四、动态创建Input元素 五、动态设|标{ֆ?/p>
六、增加和删除Option 七、动态创建单选按?/p>
八、document.formName.item("itemName") 九、动态创建单选按?/p>
十、自定义属?/p>
十一、eval("idName") 十二、event.srcElement 十三、访问的父元?/p>
十四、innerText 十五、模态和非模态窗口问?/p>
十六、frame和iframe问题 2) 常用预定义例?br /> EXCEPTION 3) 用户定义的例?br /> DECLARE
]]>
下蝲mod_jk_1.2.6_2.0.50.dll文gQ将其改名ؓmod_jk.so后放到apache2/modules目录中。?br />W二步: workers.propertiesQ?br />workers.tomcat_home=D:\My_Work\Tomcat\apache-tomcat-6.0.14
workers.java_home=D:\Program Files\Java\jdk1.5.0_07
ps=\
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1
W三步:用记事本打开apache/conf/httpd.conf文g末尾Q添加下面一D:
LoadModule jk_module modules/mod_jk.so
JkWorkersFile "D:\Program Files\Apache Software Foundation\Apache2.2\modules\workers.properties"
#ServerAdmin wangguiwei@gmail.com
#ServerName localhost
DirectoryIndex index.html index.htm index.jsp
JkMount /* ajp13
JkAutoAlias "D:\My_Work\Tomcat\apache-tomcat-6.0.14\webapps"
Options Indexes FollowSymLinks
#allow from all
保存Q停止apache服务Q在启动Q就可以新配置应用了?
******************************
一QApache与Tomcat介绍
Apache是当前用最为广泛的WWW服务器YӞh相当强大的静态HTML处理的能力?
Tomcat服务器是一个免费的开放源代码的Web应用服务器,它是Apache软g基金会(Apache Software FoundationQ的Jakarta目中的一个核心项目,由Apache、Sun和 ?其他一些公司及个h共同开发而成。由于有了Sun的参与和支持Q最新的Servlet和JSP 规范L能在Tomcat中得C玎ͼTomcat5支持最新的Servlet 2.4和JSP 2.0规范。因为Tomcat技术先q、性能E_Q而且免费Q因而深受Java爱好者的喜爱q得C部分软g开发商的认可,成ؓ目前比较行的Web应用服务器?
Tomcat和IIS、Apache{Web服务器一Ph处理HTML面的功能,另外它还是一个Servlet和JSP容器Q独立的Servlet容器是Tomcat的默认模式?br />二.Z么需要整?
整合的最主要原因是ؓ了在现有的硬件条件下提供最大的负蝲?
如果单独使用Tomcat做JSP服务器,在工作效率上会存在问?Tomcat处理静态HTML的能力不如ApacheQƈ且所能承受的最大ƈ发连接数也有一定的限制Q?
在测试中Q当q发q接较多ӞTomcat׃处于“僵歠Z状态,对后l的hq接失去响应。所以现在提Z个“整合”解x案:html?jsp的功能部分进行明分工,让tomcat只处理jsp部分Q其它的由apacheq个web server处理。Apache与Tomcat各司其职Q那么服务器的整体效率就能够得到提升?
三.整合的基本原?
作ؓApache下面的子目QTomcat ?Apache之间有着天然的联pR在实际操作中,主要是Apache作ؓL务器q行Q当监听到有jsp或者servlet的请求时Q将h转发l?tomcat服务器,由tomcat服务器进行解析后Q发回apacheQ再由apache发回用户?
在tomcat中有两个监听的端口,一个是8080用于提供web服务,一个是8009用于监听来自于apache的请求。当apache收到 jsp或者servlethӞ向tomcat ?009端口发送请求,交由tomcat处理后,再返回给apacheQ由apacheq回l客戗?
四.安装Apache与Tomcat服务?
操作pȝ环境QWindows xp home
安装文gQapache-tomcat-6.0.14.exe apache_2.2.6-win32-x86-openssl-0.9.8e.msi mod_jk-apache-2.2.4.so
到apache 与tomcat 的官方网站上面下载apache 与tomcatQ安装apache与tomcat
到http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32下蝲 mod_jk-apache-2.2.4.so
mod_jk-apache-2.2.4.so拯到apache安装目录下面的modules目录中?
五.修改Tomcat讄
在tomcat的conf目录下徏一个workers.properties的文本文Ӟd如下配置
workers.tomcat_home="tomcat安装目录"
#让mod_jk模块知道Tomcat的安装\?
workers.java_home="java安装目录"
#让mod_jk模块知道jdk路径
ps="
worker.list=ajp13
#q里是关键,名字要和httpd.conf的一致。如果这里改了httpd.conf也要攏V?
worker.ajp13.port=8009
#工作端口,tomcat的jk监听端口Q可以查看Server.xml中有port="8009"
worker.ajp13.host=localhost
#Tomcat所在机器,如果安装在与apache不同的机器则需要设|IP
worker.ajp13.type=ajp13
#cdQ好像不能改Q会出问?
worker.ajp13.lbfactor=1
#负蝲q因子
六.修改Apache讄
修改apache安装目录下conf目录下的httpd.conf,增加如下配置
LoadModule jk_module modules/mod_jk-apache-2.2.4.so
JkWorkersFile "tomcat安装目录/conf/workers.properties"
JkLogFile "apache安装目录/logs/mod_jk.log"
JkMount /*.jsp ajp13
JkMount /*.do ajp13
七.整合操作说明
mod_jk-apache-2.2.4.so相当于是apache与tomcat之间的桥梁一P所以在apache的配|文件下面加上LoadModule jk_module modules/mod_jk-apache-2.2.4.so 此模块载入?
JkWorkersFile "tomcat安装目录/conf/workers.properties" 说明了mod_jk-apache-2.2.4.so 如何工作Q当出现要{发时Q将h发送到那里q行处理Q代表了一pd的工作参数?br /> JkLogFile "apache安装目录/logs/mod_jk.log" 讑֮日志的地址?
JkMount 说明了将什么样的URLq行发送到tomcatq行处理。JkMount /*.jsp ajp13 说明了要jsph发到tomcat,JkMount /*.do ajp13说明了要?do型的servlet发到tomcatq行处理。在实际的分发中Q如果servlet命名不带后缀的话Q将无法被识别,也就无法q行处理?br />
八.l束?
在查阅了不少文章之后Q我仔细的了解了下这两者进行整合的q程Q网上很多文章讲的整合应该不是真正意义上面的整合,希望此文章能够ؓ正ؓq些问题苦恼的同行们解决一点小困难……?/p>
?1Q监控以及管理的面 jkstatus
Apache 服务器的配置文gQ用来加?JK 模块以及指定 JK 配置文g信息
?Tomcat 服务器的q接定义文g
URI 映射文gQ用来指定哪?URL ?Tomcat 处理Q你也可以直接在 httpd.conf 中配|这?URIQ但是独立这些配|的好处?JK 模块会定期更新该文g的内容,使得我们修改配置的时候无需重新启动 Apache 服务器?/p>
# (httpd.conf)
# 加蝲 mod_jk 模块
LoadModule jk_module modules/mod_jk.so
#
# Configure mod_jk
#
JkWorkersFile conf/workers.properties
JkMountFile conf/uriworkermap.properties
JkLogFile logs/mod_jk.log
JkLogLevel warn
#
# workers.properties
#
# list the workers by name
worker.list=DLOG4J, status
# localhost server 1
# ------------------------
worker.s1.port=8109
worker.s1.host=localhost
worker.s1.type=ajp13
# localhost server 2
# ------------------------
worker.s2.port=8209
worker.s2.host=localhost
worker.s2.type=ajp13
worker.s2.stopped=1
worker.DLOG4J.type=lb
worker.retries=3
worker.DLOG4J.balanced_workers=s1, s2
worker.DLOG4J.sticky_session=1
worker.status.type=status
/*=DLOG4J
/jkstatus=status
!/*.gif=DLOG4J
!/*.jpg=DLOG4J
!/*.png=DLOG4J
!/*.css=DLOG4J
!/*.js=DLOG4J
!/*.htm=DLOG4J
!/*.html=DLOG4J
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / http://localhost:8080/
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / balancer://example/
<Proxy balancer://example/>
BalancerMember http://server1:8080/
BalancerMember http://server2:8080/
BalancerMember http://server3:8080/
</Proxy>
?2Q监控集运行状?/b>
ProxyPass /images !
ProxyPass /css !
ProxyPass /js !
ProxyPass / balancer://example/
<Proxy balancer://example/>
BalancerMember ajp://server1:8080/
BalancerMember ajp://server2:8080/
BalancerMember ajp://server3:8080/
</Proxy>
回页?/font>
]]>
hashCode():
q?个函数返回的是一个用来进行赫希操作的整型代号Q请不要把这个代号和前面所说的参阅变量所代表的代号弄混了。后者不仅仅是个代号q具有在内存中才查找?象的位置的功能。hashCode()所q回的值是用来分类对象在一些特定的攉对象中的位置。这些对象是HashMap, Hashtable, HashSetQ等{。这个函数和上面的equals()函数必须自己设计Q用来协助HashMap, Hashtable, HashSetQ等{对自己所攉的大量对象进行搜d定位?br />
q些攉对象I竟如何工作的,惌每个元对象hashCode是一个箱子的 ~码Q按照编码,每个元对象就是根据hashCode()提供的代号归入相应的子里。所有的子加v来就是一个HashSetQHashMapQ或 Hashtable对象Q我们需要寻找一个元对象Ӟ先看它的代码Q就是hashCode()q回的整型|q样我们扑ֈ它所在的子Q然后在子里,?个元对象都拿出来一个个和我们要扄对象q行ҎQ如果两个对象的内容相等Q我们的搜寻也就l束。这U操作需要两个重要的信息Q一是对象的 hashCode()Q还有一个是对象内容Ҏ的结果?br />
hashCode()的返回值和equals()的关pd下:
Z么这两个规则是这LQ原因其实很单,拿HashSet来说吧,HashSet可以拥有一个或更多的箱子,在同一个箱子中可以有一?或更多的独特元对象(HashSet所容纳的必L独特的元对象Q。这个例子说明一个元对象可以和其他不同的元对象拥有相同的hashCode。但是一?元对象只能和拥有同样内容的元对象相等。所以这两个规则必须成立?br />
设计q两个函数所要注意到的:
如果你设计的对象cdq不使用于收集性对象,那么没有必要自己再设计这两个函数的处理方式。这是正的面向对象设计ҎQQ何用户一时用不到的功能,先不要设计Q以免给日后功能扩展带来ȝ?/p>
知道以上q些能够帮助你:
1. q行更好的设计和开发?br />2. q行更好的测试案例开发?br />3. 在面试过E中让面试者对你的学识渊博感到满意?
]]>
/************************************
* d事gl定
* @param obj : 要绑定事件的元素
* @param type : 事g名称。不?"on". ?: "click" 而不?"onclick".
* @param fn : 事g处理函数
************************************/
function bind( obj, type, fn ){if( obj.attachEvent){
obj['e'+type+fn]= fn;
obj[type+fn]=function(){obj['e'+type+fn]( window.event);}
obj.attachEvent('on'+type, obj[type+fn]);}else
obj.addEventListener( type, fn,false);}
var fn=function(){alert("Hello, World!!");};
bind(document,"click", fn);删除事gl定 unbind()
/************************************
* 删除事gl定
* @param obj : 要删除事件的元素
* @param type : 事g名称。不?"on". ?: "click" 而不?"onclick"
* @param fn : 事g处理函数
************************************/
function unbind( obj, type, fn ){if( obj.detachEvent){
obj.detachEvent('on'+type, obj[type+fn]);
obj[type+fn]=null;}else
obj.removeEventListener( type, fn,false);}
摘自Q?a >http://www.js8.in/408.html
]]>
]]>
1、打开游标
2、开始@?br /> 3、从游标中取?br /> 4、检查那一行被q回
5、处?br /> 6、关闭@?br /> 7、关闭游?br />但还有一U游标与q种不相同,q就是FOR循环Q用于FOR循环的游标按照正常的声明方式声明Q它的优点在于不需要显式的打开、关闭、取数据Q测试数据的存在、定义存放数据的变量{等?/font>
]]>
... --语句
EXCEPTION -- 例外处理
WHEN ...
...
WHEN OTHERS
...
END;
WHEN CURSOR_ALREADY_OPEN THEN -- ORA-06511 SQLCODE = -6511 游标已经打开
...
WHEN DUP_VAL_ON_INDEX THEN -- ORA-00001 SQLCODE = -1 向唯一索引中插入重复数?br /> ...
WHEN INVALID_CURSOR THEN -- ORA-01001 SQLCODE = -1001 非法游标操作
...
WHEN INVALID_NUMBER THEN -- ORA-01722 SQLCODE = -1722 字符向数字{换失?br /> ...
WHEN LOGIN_DENIED THEN -- ORA-01017 SQLCODE = -1017
...
WHEN NO_DATA_FOUND THEN -- ORA-01403 SQLCODE = +100 没有扑ֈ数据
...
WHEN NOT_LOGGED_ON THEN -- ORA-01012 SQLCODE = -1012
...
WHEN PROGRAM_ERROR THEN -- ORA-06501 SQLCODE = -6501 E序错误
...
WHEN STORAGE_ERROR THEN -- ORA-06500 SQLCODE = -6500
...
WHEN TIMEOUT_ON_RESOURCE THEN -- ORA-00051 SQLCODE = -51
...
WHEN TOO_MANY_ROWS THEN -- ORA-01422 SQLCODE = -1422 q回多行
...
WHEN TRANSACTION_BACKED_OUT THEN -- ORA-00061 SQLCODE = -61
...
WHEN VALUE_ERROR THEN -- ORA-06502 SQLCODE = -6502 数D{换错?br /> ...
WHEN ZERO_DIVIDE THEN -- ORA-01476 SQLCODE = -1476 被零?br /> ...
WHEN OTHERS THEN -- 其它M错误的处?br /> ...
END;
FIND_DATA_EMP EXCEPTION;
BEGIN
IF ... THEN
RAISE FIND_DATA_EMP;
END IF;
EXCEPTION
WHEN LOB_NO_LOCKED THEN
...
END;
4) EXCEPTION_INIT的?br /> PRAGMA EXCEPTION_INIT(例外? ORACLE错误?;
注:PRAGMA 是一个编译器命oQ可以认为是对编译器的一个注释?br /> 例:
DECLARE
ZERO_DIVIDE1 EXCEPTION;
PRAGMA EXCEPTION_INIT(ZERO_DIVIDE1, -1476);
BEGIN
...
EXCEPTION
WHEN ZERO_DIVIDE1 THEN
...
END;
]]>
一Q一个公p辑ּ形式的虚拟表?br />二:一个初始化表?br />三:一个与虚拟表进行完全内q接的辅助表?br />需要用UNION all合ƈ上边3个查询,然后用select从递归输出中得到最l的l果?br />大体上如下Ş?br />with XX(x1,x2,x3) as -------@0
(
select a.s,a.s1 from a ----@1
union all ----@2
select * from a,xx where a.s=xx.x1 ------@3
)
select ... from xx where .... -------@4
@0:为with体,卌拟表
@1:为初始化表,q里需要定义初始化的一些行Q也是你递归的出发点Q或者说父行Q这部分逻辑只执行一ơ,它的l果作ؓ虚拟表递归的初始化内容?br />@2:q里必须用UNION all
@3:q里需要定义递归的条Ӟ辅助表)Q这里定义递归的逻辑Q需要注意的是父行和子行q行q接的时候逻辑一定要清楚父子关系Q不然很Ҏ变成d@环的Q这里首先将初始化表的结果作为条件进行查询,在把执行的结果添加到虚拟表中Q只要这里能查询出来记录Q那么就会进行下一步递归循环?br />@4:q里是对虚拟表的查询语句?br />
例子Q?br />WITH ROOT AS
(
SELECT a.id, a.areaname
FROM AREATB a
WHERE a.id = #id#
UNION ALL
SELECT a.id, a.areaname
FROM AREATB a, ROOT r
WHERE a.id = r.id
)
SELECT id, areaname
FROM ROOT