﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-J2EE社区</title><link>http://www.blogjava.net/xcp/</link><description>苟有恒,何必三更起五更眠;&lt;br/&gt;最无益,只怕一日曝十日寒.</description><language>zh-cn</language><lastBuildDate>Mon, 20 Apr 2026 21:04:22 GMT</lastBuildDate><pubDate>Mon, 20 Apr 2026 21:04:22 GMT</pubDate><ttl>60</ttl><item><title>Nginx 配置文件详解</title><link>http://www.blogjava.net/xcp/archive/2017/12/22/432971.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Fri, 22 Dec 2017 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2017/12/22/432971.html</guid><description><![CDATA[ #总统参见：https://segmentfault.com/a/1190000002789743

#定义 Nginx 运行的用户和用户组
#user  root（linux）
#user  nobody;

#定义了nginx对外提供web服务时的worker进程数。最优值取决于许多因素，包括（但不限于）CPU核的数量、存储数据的硬盘数量及负载模式。不能确定的时候，将其设置为可用的CPU内核数将是一个好的开始（设置为&#8220;auto&#8221;将尝试自动检测它）。
#一般可设置为可用的CPU内核数。
#文档不错：http://blog.csdn.net/fireroll/article/details/15756745
worker_processes  4;

#打开文件描述符的最大数量限制。如果没设置的话，这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比&#8220;ulimit -a&#8221;更多的文件，所以把这个值设高，这样nginx就不会有&#8220;too many open files&#8221;问题了。
worker_rlimit_nofile 65535;

#错误日志位置和级别，debug、info、notice、warn、error、crit、alert、emerg
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
error_log  logs/error.log  error;

#指定主进程文件存放地方
#pid        logs/nginx.pid;

events {
    #单个进程最大连接数（最大连接数=连接数*进程数）
    #如果设置了上面提到的worker_rlimit_nofile，我们可以将这个值设得很高。
    #文档不错：http://blog.csdn.net/xifeijian/article/details/20956605
    worker_connections  2048;

    #告诉nginx收到一个新连接通知后接受尽可能多的连接
    multi_accept on;

    #设置用于复用客户端线程的轮询方法。【select、poll、epoll和kqueue】
    #https://www.cnblogs.com/linganxiong/p/5583415.html
    #use epoll;
}


http {
    #隐藏 Nginx 的版本号，提高安全性。
    server_tokens off;

    #是一个在当前文件中包含另一个文件内容的指令。这里我们使用它来加载文件扩展名与文件类型映射表。nginx根据映射关系，设置http请求响应头的Content-Type值。当在映射表找不到时，使用nginx.conf中default-type指定的默认值。
    include       mime.types;
    #设置文件使用的默认的MIME-type
    default_type  application/octet-stream;
    #默认编码
    charset UTF-8;

    #日志格式设定
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    ##定义访问日志，设置为 off 可以关闭日志，提高性能
    Eccess_log  logs/access.log  main;
    Eccess_log  logs/access.log  main buffer=32k;
    access_log off;
    log_not_found off;

    #开启高效文件传输模式，sendfile指令指定nginx是否调用sendfile函数来输出文件，对于普通应用设为 on，如果用来进行下载等应用磁盘IO重负载应用，可设置为off，以平衡磁盘与网络I/O处理速度，降低系统的负载。
    #注意：如果图片显示不正常把这个改成off。
    sendfile        on;

    #是否开启目录列表访问，默认关闭。
    autoindex off;

    #告诉 Nginx 在一个数据包里发送所有头文件，而不一个接一个的发送
    tcp_nopush     on;

    #告诉 Nginx 不要缓存数据，而是一段一段的发送--当需要及时发送数据时，就应该给应用设置这个属性，这样发送一小块数据信息时就不能立即得到返回值。
    #Nginx 默认会始终工作在 tcp nopush 状态下。但是当开启前面的 sendfile on; 时，它的工作特点是 nopush的最后一个包会自动转转换到 nopush off。
    #为了减小那200ms的延迟，开启 nodelay on; 将其很快传送出去。结论就是 sendfile on; 开启时，tcp_nopush 和 tcp_nodelay 都是on 是可以的。
    tcp_nodelay on;

    #连接超时时间，单位是秒
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #读取HTTP头部的超时时间，默认值 60。
    #客户端与服务器建立连接后将开始接收HTTP头部，在这个过程中，如果在一个时间间隔（超时时间）内没有读取到客户端发来的字节，则认为超时，并向客户端返回408 ("Request timed out")响应。
    #client_header_timeout 60;

    #默认值 60。与client_header_timeout相似，只是这个超时时间只在读取HTTP包体时才有效。
    #client_body_timeout 10;

    #发送响应的超时时间，默认值 60。即Nginx服务器向客户端发送了数据包，但客户端一直没有去接收这个数据包。如果某个连接超过send_timeout定义的超时时间，那么Nginx将会关闭这个连接。
    #send_timeout 60;

    #连接超时后将通过向客户端发送RST包来直接重置连接。这个选项打开后，Nginx会在某个连接超时后，不是使用正常情形下的四次握手关闭TCP连接，而是直接向用户发送RST重置包，不再等待用户的应答，直接释放Nginx服务器上关于这个套接字使用的所有缓存（如TCP滑动窗口）。相比正常的关闭方式，它使得服务器避免产生许多处于FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT状态的TCP连接。注意，使用RST重置包关闭连接会带来一些问题，默认情况下不会开启。
    #reset_timedout_connection off;

    #要限制连接，必须先有一个容器对连接进行计数，"zone=" 是给它一个名字，可以随便叫，这个名字要跟下面的 limit_conn 一致。$binary_remote_addr 用二进制来储存客户端的地址，1m 可以储存 32000 个并发会话。
    #limit_conn_zone $binary_remote_addr zone=addr:5m;

    #给定的key设置最大连接数。这里key是addr，我们设置的值是100，也就是说我们允许每一个IP地址最多同时打开有100个连接。
    #limit_conn addr 100;

    #对每个连接限速100k。这如果一个IP允许两个并发连接，那么这个IP就是限速200K。
    #limit_rate 100k; 

    #该模块可以读取预先压缩的gz文件，这样可以减少每次请求进行gzip压缩的CPU资源消耗。该模块启用后，nginx首先检查是否存在请求静态文件的gz结尾的文件，如果有则直接返回该gz文件内容。
    gzip_static off;  

    #启用Gizp压缩
    #gzip  on;

    # 禁用客户端为 IE6 时的 gzip功能。
    gzip_disable "msie6";

    #Nginx做为反向代理的时候启用。可选值：off|expired|no-cache|no-sotre|private|no_last_modified|no_etag|auth|any
    gzip_proxied any;

    #设置允许压缩的页面最小字节数，页面字节数从header头中的Content-Length中进行获取。建议设置成大于1k的字节数，小于1k可能会越压越大。
    gzip_min_length 1024;

    #设置数据的压缩等级。这个等级可以是1-9之间的任意数值，9是最慢但是压缩比最大的。
    gzip_comp_level 5;

    #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。 例如 4 4k 代表以4k为单位，按照原始数据大小以4k为单位的4倍申请内存。如果没有设置，默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
    gzip_buffers 4 16k;

    #设置需要压缩的数据格式。Nginx默认只对text/html进行压缩。
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    #为打开文件指定缓存，默认是没有启用的，max 指定缓存数量，建议和打开文件数一致，inactive 是指经过多长时间文件没被请求后删除缓存。
    open_file_cache max=65535 inactive=30s;

    #多长时间检查一次缓存的有效信息
    open_file_cache_valid 30s;

    #open_file_cache指令中的inactive参数时间内文件的最少使用次数，如果超过这个数字，文件描述符一直是在缓存中打开的。出现 Last-Modified 不变的情况，就是因为当nginx对一个静态文件缓存后，如果30s内还在访问它，那么它的缓存就一直存在，直到30s内你不访问了为止。
    open_file_cache_min_uses 2;
    #是否记录cache错误
    open_file_cache_errors on;

    #服务器集群名字(supxx.com)
    <、weight（权重）：指定轮询几率，weight和访问比率成正比，用于后端服务器性能不均的情况。例：server 10.0.0.77 weight=5;
    >、ip_hash（访问ip）：每个请求按访问ip的hash结果分配，这样每个访客固定访问一个后端服务器，可以解决session的问题。
    #upstream favresin{
    #  ip_hash;
    #   server 10.0.0.11:8080;
    #}
    &、fair（第三方）：按后端服务器的响应时间来分配请求，响应时间短的优先分配。与weight分配策略类似。
    #upstream favresin{ 
    #  server 10.0.0.10:8080;
    #  fair;
    #}
    *、url_hash（第三方）： 按访问url的hash结果来分配请求，使每个url定向到同一个后端服务器，后端服务器为缓存时比较有效。
    # 注意：在upstream中加入hash语句，server语句中不能写入weight等其他的参数，hash_method是使用的hash算法。
    #upstream resinserver{
    #  server 10.0.0.10:7777;
    #  shash $request_uri;
    #  hash_method crc32;
    #}
    #
    #upstream还可以为每个设备设置状态值，这些状态值的含义分别如下：
    #down 表示单前的server暂时不参与负载.
    #weight 默认为1.weight越大，负载的权重就越大。
    #max_fails ：允许请求失败的次数默认为1.当超过最大次数时，返回proxy_next_upstream 模块定义的错误.
    #fail_timeout : max_fails次失败后，暂停的时间。
    #backup： 其它所有的非backup机器down或者忙的时候，请求backup机器。所以这台机器压力会最轻。
    #upstream bakend{ #定义负载均衡设备的Ip及设备状态
    #  ip_hash;
    #  server 10.0.0.11:9090 down;
    #  server 10.0.0.11:8080 weight=2;
    #  server 10.0.0.11:6060;
    #  server 10.0.0.11:7070 backup;
    #  server 10.0.0.11:5050 weight=10 max_fails=3 fail_timeout=30s;
    #}
    upstream  supxx.com {
	server    127.0.0.1:8080  weight=1;
	server    127.0.0.1:9090  weight=2;
	fair;
    }	

    #当前的Nginx的配置
    server {
        #监听端口，nginx 会根据请求的 HOST 来决定使用哪个 SERVER 段的配置。如果没有匹配的 server_name，则默认使用配置文件中第一个。加上 default_server 则可以以指定没有匹配时的默认规则。
        #listen       80;
	listen 80 default_server;

	#域名可以有多个，用空格隔开
        server_name  www.supxx.com www.supxx.cn;

        #charset koi8-r;
        Eccess_log  logs/host.access.log  main;

	#配置 ssl，有需要时开启。
	#ssl on;
	#ssl_certificate /etc/nginx/ssl/server.crt;
	#ssl_certificate_key /etc/nginx/ssl/server.key;

        #服务映射
	#http://blog.csdn.net/heiyueya/article/details/70149270
        #location的匹配种类有哪些?
	#格式[空格|=|~|~*|^~|!~|!~*]/uri/{}]
	#=开头表示精确匹配
	#~开头表示区分大小写的正则匹配
	#~*开头表示不区分大小写的正则匹配
	#^~ 开头表示uri以某个常规字符串开头，理解为匹配 url路径即可。nginx不对url做编码，因此请求为/static/20%/aa，可以被规则^~ /static/ /aa匹配到（注意是空格）。
	#!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
	#/通用匹配, 如果没有其它匹配,任何请求都会匹配到
	#
	#location搜索顺序
	#no优先级：(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
	<.首先匹配=
	>.其次匹配^~
	&.再其次按照配置文件的顺序进行正则匹配、
	*.最后是交给/进行通用匹配
	#
	#注意：
	#当有匹配成功时，立刻停止匹配，按照当前匹配规则处理请求
	#特别注意： 字符串匹配优先搜索，但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配，则会直接命中，停止搜索正则 )，然后继续搜索正则匹配，如果有正则匹配，则命中正则匹配，如果没有正则匹配，则命中最长的字符串匹配.
	#
	#
	#
	#实际使用建议
	#所以实际使用中，个人觉得至少有三个匹配规则定义，如下：
	#直接匹配网站根，通过域名访问网站首页比较频繁，使用这个会加速处理，官网如是说。
	#这里是直接转发给后端应用服务器了，也可以是一个静态首页
	# 第一个必选规则
	#location = / {
	#    proxy_pass http://tomcat:8080/index
	#}
	# 第二个必选规则是处理静态文件请求，这是nginx作为http服务器的强项
	# 有两种配置模式，目录匹配或后缀匹配,任选其一或搭配使用
	#location ^~ /static/ {
	#    root /webroot/static/;
	#}
	#location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
	#    root /webroot/res/;
	#}
	#第三个规则就是通用规则，用来转发动态请求到后端应用服务器
	#非静态文件请求就默认是动态请求，自己根据实际把握
	#毕竟目前的一些框架的流行，带.php,.jsp后缀的情况很少了
	#location / {
	#    proxy_pass http://tomcat:8080/
	#}

	#
	#
	#
	#
	#
	#
	#
	#
	#

	location / {
	    proxy_pass http://supxx.com;
            proxy_redirect default;
        }
	#图片缓存时间设置
	location ~* .*.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires 10d;
        }
        #JS和CSS缓存时间设置
        location ~* .*.(js|css)?$ {
            expires 1h;
        }


	*04页面配置
        #error_page  404              /404.html;
	
	o00页面设置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }


        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
 <img src ="http://www.blogjava.net/xcp/aggbug/432971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2017-12-22 21:04 <a href="http://www.blogjava.net/xcp/archive/2017/12/22/432971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决ajax跨域访问问题</title><link>http://www.blogjava.net/xcp/archive/2016/05/06/430376.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Fri, 06 May 2016 04:39:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2016/05/06/430376.html</guid><description><![CDATA[<div><font style="background-color: #cce8cf">前端js:<br />$.ajax({<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<a href="'http://localhost/njkh/test'">url:'http://localhost/xxxx/test'</a>, //后台处理程序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;async:true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;type:'get',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //数据发送方式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;dataType:'jsonp',&nbsp;&nbsp;&nbsp;&nbsp; //接受数据格式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;jsonp: "callbackparam",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的接受 的参数名(默认为callback)<br />&nbsp;&nbsp;&nbsp;&nbsp;/*jsonpCallback:"jsonpCallback",*///可选项，写上表示返回函数的函数名用&#8220; jsonpCallback&#8221;，不写 默认为jQuery自动生成的随机函数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;success:function(result){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;var eTime = new Date(); //结束时间 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;//设置在线人数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;$("#server_count_1").html(result+"人");&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;error:function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;alert("服务器1连接失败");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;}<br />&nbsp;&nbsp;&nbsp;});<br /><br /><br /><br /><br />后端处理类：<br />@Override<br />&nbsp;public String execute() throws Exception {<br />&nbsp;&nbsp;int zxrs = SessionCounter.getRealCount();<br />&nbsp;&nbsp;response.setContentType("text/plain");<br />&nbsp;&nbsp;&nbsp;&nbsp; response.setCharacterEncoding("utf-8");<br />&nbsp;&nbsp;&nbsp;&nbsp; String callbackparam=request.getParameter("callbackparam");<br />&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println("callbackparam:"+callbackparam);<br />&nbsp;&nbsp;&nbsp;&nbsp; PrintWriter writer=response.getWriter();<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; //如果ajax请求写了 jsonpCallback:"jsonpCallback",<br />&nbsp;&nbsp;&nbsp;&nbsp; //writer.write("jsonpCallback("+zxrs+")");<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; //如果ajax请求没有写 jsonpCallback:"jsonpCallback",<br />&nbsp;&nbsp;&nbsp;&nbsp; writer.write(callbackparam+"("+zxrs+")");//需要callbackparam参数接收随机函数名<br />&nbsp;&nbsp;return null;<br />&nbsp;}</font></div><img src ="http://www.blogjava.net/xcp/aggbug/430376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2016-05-06 12:39 <a href="http://www.blogjava.net/xcp/archive/2016/05/06/430376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>同一服务器　应用的Session冲突</title><link>http://www.blogjava.net/xcp/archive/2016/05/06/430375.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Fri, 06 May 2016 04:33:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2016/05/06/430375.html</guid><description><![CDATA[<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-size: 16px; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">使用apache反向代理解决在应用A使用Iframe嵌入应用B的功能而产生的跨域问题后，应用B的功能能正常使用了。但也产生了另外一个问题：打开应用A的任何页面都会跳转主页，问题原因是：session丢失。</span></p>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-size: 16px; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">具体分析：</strong></span></div>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"></span></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-size: 16px; font-family: 微软雅黑; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">session是通过在客户端生成一个cookie，所有请求会带上这个cookie。一个cookie的NAME、Domain和Path属性值均相同，则会覆盖，若未设置Domain域，则域为ip（不包括端口），因此应用A的session被应用B的session覆盖了。</span></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-size: 16px; font-family: 微软雅黑; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"><span style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px; background-color: rgb(197,209,241)"></span></span></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><br style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" /></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><span style="font-size: 16px; font-family: 微软雅黑; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">经测试：tomcat、weblogic、websphere的session默认都是JSESSIONID 为key来识别的，因此在没有特别设置下，同一个域下的多个应用session会互相覆盖。&nbsp;</span></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px"><span style="font-size: 16px; font-family: 微软雅黑; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">解决办法：</span></strong></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">设置各个应用使用不同的cookie-name，或者将JSESSIONID的path路径设置为不同。</p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">1）WebLogic的Cookie相关配置：weblogic.xml</p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<table style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; white-space: normal; word-spacing: 0px; border-collapse: collapse; border-bottom: rgb(248,248,248) 1px solid; text-transform: none; color: rgb(68,68,68); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; border-spacing: 1px; border-left: rgb(248,248,248) 1px solid; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px" bordercolor="#000" border="1">
<tbody style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
<tr style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">
<p style="word-wrap: break-word; font-size: 12px; white-space: normal; word-break: break-all; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 8px 0px; letter-spacing: 0px; line-height: 22px; padding-right: 0px">属性名</p></td>
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">默认值</td>
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">值</td></tr>
<tr style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">cookie-name</td>
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">JSESSIONID</td>
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">如未设置，默认为&#8220;JSESSIONID&#8221;</td></tr>
<tr style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">cookie-path</td>
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">NULL</td>
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">如未设置，默认为&#8220;/&#8221;</td></tr>
<tr style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">cookie-domain</td>
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">NULL</td>
<td style="border-top: rgb(248,248,248) 1px solid; border-right: rgb(248,248,248) 1px solid; border-bottom: rgb(248,248,248) 1px solid; padding-bottom: 1px; padding-top: 1px; padding-left: 2px; margin: 0px; border-left: rgb(248,248,248) 1px solid; padding-right: 2px">如未设置，默认为发放cookie的服务器的域</td></tr></tbody></table>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">示例代码：&nbsp;&nbsp;</div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><pre style="font-size: 9pt; border-top: rgb(221,221,221) 1px solid; font-family: 'Courier New', Arial; border-right: rgb(221,221,221) 1px solid;background: rgb(246,246,246); border-bottom: rgb(221,221,221) 1px solid; padding-bottom: 5px; padding-top: 5px; padding-left: 5px; margin: 0px; border-left: rgb(221,221,221) 1px solid; line-height: 18px; padding-right: 5px"><span style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">1.&nbsp;&nbsp;</span>&lt;<span style="color: rgb(128,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">session-descriptor</span>&gt;&nbsp; <span style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">2.&nbsp;&nbsp;</span>&lt;<span style="color: rgb(128,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">session-param</span>&gt;&nbsp; <span style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">3.&nbsp;&nbsp;</span>&lt;<span style="color: rgb(128,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">param-name</span>&gt;CookieName&lt;<span style="color: rgb(128,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">/param-name</span>&gt;&nbsp; <span style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">4.&nbsp;&nbsp;</span>&lt;<span style="color: rgb(128,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">param-value</span>&gt;HADFCookie&lt;<span style="color: rgb(128,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">/param-value</span>&gt;&nbsp; <span style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">5.&nbsp;&nbsp;</span>&lt;<span style="color: rgb(128,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">/session-param</span>&gt;&nbsp; <span style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">6.&nbsp;&nbsp;</span>&lt;<span style="color: rgb(128,128,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">/session-descriptor</span>&gt;</pre></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><br style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" />&nbsp;</div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">延伸阅读：1.&nbsp;<span class="Apple-converted-space">&nbsp;</span><a style="font-size: 12px; color: rgb(255,131,115); outline-width: 0px; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; margin: 0px; outline-color: invert; padding-right: 0px" href="http://blog.csdn.net/designlife/article/details/2552186" rel="nofollow"><span style="color: rgb(64,64,64); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">关于WebLogic的Session丢失的问题</span></a>&nbsp;<span class="Apple-converted-space">&nbsp;</span><a style="font-size: 12px; color: rgb(255,131,115); outline-width: 0px; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; margin: 0px; outline-color: invert; padding-right: 0px" href="http://blog.csdn.net/DesignLife/article/details/2552186" rel="nofollow">http://blog.csdn.net/DesignLife/article/details/2552186</a></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;WebLogic如何设置session超时时间&nbsp;<span class="Apple-converted-space">&nbsp;</span><a style="font-size: 12px; color: rgb(255,131,115); outline-width: 0px; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; margin: 0px; outline-color: invert; padding-right: 0px" href="http://tonyaction.blog.51cto.com/227462/201900" rel="nofollow">http://tonyaction.blog.51cto.com/227462/201900</a></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;</div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;</div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">
<p style="word-wrap: break-word; font-size: 12px; white-space: normal; word-break: break-all; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 8px 0px; letter-spacing: 0px; line-height: 22px; padding-right: 0px"><span style="font-size: 16px; font-family: Arial; color: rgb(0,0,0); padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">2）websphere的设置（设置不同JSESSIONID的path）</span></p>
<p style="word-wrap: break-word; font-size: 12px; white-space: normal; word-break: break-all; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 8px 0px; letter-spacing: 0px; line-height: 22px; padding-right: 0px">应用程序-&gt;企业应用程序-&gt; [Application Server] -&gt;<br style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" />会话管理-&gt;1.覆盖会话管理(需打钩).<br style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" />会话管理-&gt;2.启用 cookie(需打钩)-&gt;修改'Cookie路径'&nbsp;</p></div>
<div style="white-space: normal; word-spacing: 0px; text-transform: none; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 0px; widows: 1; letter-spacing: normal; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"></div>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;<a style="font-size: 12px; color: rgb(255,131,115); outline-width: 0px; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; margin: 0px; outline-color: invert; padding-right: 0px" href="http://static.oschina.net/uploads/space/2012/1226/231826_4Xdw_226386.png" target="_blank"><img style="cursor: pointer; max-width: 640px; border-top: rgb(221,221,221) 1px solid; border-right: rgb(221,221,221) 1px solid;background: rgb(244,247,249); border-bottom: rgb(221,221,221) 1px solid; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 10px 0px; border-left: rgb(221,221,221) 1px solid; padding-right: 0px" alt="" src="http://static.oschina.net/uploads/space/2012/1226/231826_4Xdw_226386.png" /></a></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">3）Tomcat的设置（设置不同JSESSIONID的path）</strong></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">修改tomcat/conf/server.xml：&nbsp;</p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">&nbsp;</p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">1.tomcat5修改方法</strong></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">在启动项中增加org.apache.catalina.SESSION_COOKIE_NAME参数</p>
<blockquote style="background: rgb(244,253,253); white-space: normal; word-spacing: 0px; position: relative; text-transform: none; color: rgb(51,51,51); padding-bottom: 3px; text-align: left; padding-top: 3px; font: 10pt/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 25px; margin: 20px 10px; border-left: rgb(164,218,240) 3px solid; widows: 1; letter-spacing: normal; padding-right: 25px; text-indent: 0px; -webkit-text-stroke-width: 0px">
<p style="word-wrap: break-word; font-size: 12px; white-space: normal; word-break: break-all; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 8px 0px; letter-spacing: 0px; line-height: 22px; padding-right: 0px">linux<br style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" />JAVA_OPTS=&#8217;-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname&#8216;</p>
<p style="word-wrap: break-word; font-size: 12px; white-space: normal; word-break: break-all; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 8px 0px; letter-spacing: 0px; line-height: 22px; padding-right: 0px">win<br style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px" />set JAVA_OPTS=&#8221;-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname&#8220;</p></blockquote>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px"><strong style="padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; padding-right: 0px">2.tomcat6和tomcat7修改方法相同</strong></p>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">在Context容器标签上增加sessionCookieName参数</p>
<blockquote style="background: rgb(244,253,253); white-space: normal; word-spacing: 0px; position: relative; text-transform: none; color: rgb(51,51,51); padding-bottom: 3px; text-align: left; padding-top: 3px; font: 10pt/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 25px; margin: 20px 10px; border-left: rgb(164,218,240) 3px solid; widows: 1; letter-spacing: normal; padding-right: 25px; text-indent: 0px; -webkit-text-stroke-width: 0px">
<p style="word-wrap: break-word; font-size: 12px; white-space: normal; word-break: break-all; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 8px 0px; letter-spacing: 0px; line-height: 22px; padding-right: 0px">&lt;Context path=&#8221;/&#8221; docBase=&#8221;webapp&#8221; reloadable=&#8221;false&#8221; sessionCookieName=&#8221;yoursessionname&#8221;&gt;&lt;/Context&gt;</p></blockquote>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">还可以加上sessionCookiePath</p>
<blockquote style="background: rgb(244,253,253); white-space: normal; word-spacing: 0px; position: relative; text-transform: none; color: rgb(51,51,51); padding-bottom: 3px; text-align: left; padding-top: 3px; font: 10pt/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 25px; margin: 20px 10px; border-left: rgb(164,218,240) 3px solid; widows: 1; letter-spacing: normal; padding-right: 25px; text-indent: 0px; -webkit-text-stroke-width: 0px">&lt;Context ... sessionCookiePath="/" &gt; ... &lt;/Context&gt;</blockquote>
<p style="word-wrap: break-word; white-space: normal; word-spacing: 0px; text-transform: none; word-break: break-all; color: rgb(51,51,51); padding-bottom: 0px; text-align: left; padding-top: 0px; font: 12px/22px 'Microsoft YaHei', Verdana, sans-serif, 宋体; padding-left: 0px; margin: 8px 0px; widows: 1; letter-spacing: 0px; padding-right: 0px; background-color: rgb(255,255,255); text-indent: 0px; -webkit-text-stroke-width: 0px">延伸阅读：tomcat修改jsessionid在cookie中的名称<span class="Apple-converted-space">&nbsp;</span><a style="font-size: 12px; color: rgb(255,131,115); outline-width: 0px; padding-bottom: 0px; padding-top: 0px; outline-style: none; padding-left: 0px; margin: 0px; outline-color: invert; padding-right: 0px" href="http://blog.shilimin.com/338.htm" rel="nofollow">http://blog.shilimin.com/338.htm</a></p> <img src ="http://www.blogjava.net/xcp/aggbug/430375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2016-05-06 12:33 <a href="http://www.blogjava.net/xcp/archive/2016/05/06/430375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jms activemq完整实例</title><link>http://www.blogjava.net/xcp/archive/2014/09/11/417837.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Thu, 11 Sep 2014 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2014/09/11/417837.html</guid><description><![CDATA[ http://www.cppblog.com/khan/archive/2006/02/13/3236.html<img src ="http://www.blogjava.net/xcp/aggbug/417837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2014-09-11 13:53 <a href="http://www.blogjava.net/xcp/archive/2014/09/11/417837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jfinal实例－北京丰帆佳宇运输有限公司</title><link>http://www.blogjava.net/xcp/archive/2014/09/07/417749.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Sun, 07 Sep 2014 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2014/09/07/417749.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/417749.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2014/09/07/417749.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/417749.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/417749.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面学习了一个开源框架Jfinal，并用此框架开发了一个实例网站现进行分享.公司名称：北京丰帆佳宇运输有限公司公司简介：渣土消纳证办理,大型支护土方深度开挖,矿山暗挖,基坑开挖,建筑垃圾清运,渣土清运,砂石料配送,工程机械租赁业务公司网址：www.bjffjy.com&nbsp; &nbsp;&nbsp;1、框架Jfinal+freemarker+mysql&nbsp; &nbsp; &nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/xcp/archive/2014/09/07/417749.html'>阅读全文</a><img src ="http://www.blogjava.net/xcp/aggbug/417749.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2014-09-07 20:43 <a href="http://www.blogjava.net/xcp/archive/2014/09/07/417749.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2014 年中国开源优秀项目获奖-Jfinal</title><link>http://www.blogjava.net/xcp/archive/2014/09/07/417748.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Sun, 07 Sep 2014 12:14:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2014/09/07/417748.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/417748.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2014/09/07/417748.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/417748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/417748.html</trackback:ping><description><![CDATA[<p>&nbsp;　　开源中国开源世界"高峰论坛（简称"论坛"）每年6月由中国开源软件推进联盟（COPU）主办自2006年起，已成功举办八届，是我国开源界一年一度的盛 会，影响 深远，受到国内外开源组织、人士的高度关注，是开源爱好者获取最新开源讯息的有效平台，有力地促进了开源领域国际与国内、企业与 政府、企业与社区组织之间的合作与发展,已为国内开源界对外交流合作的一个重要窗口。今年第九届论坛已于2014年6月27-28日（周五至 周六）在北京隆重召开。（<a href="http://www.oschina.net/news/53265/2014-good-opensource-projects?from=20140706">http://www.oschina.net/news/53265/2014-good-opensource-projects?from=20140706</a>）<br />&nbsp;&nbsp;&nbsp;&nbsp; 居然开源项目Jfinal排在第一位，于是下定决心研究下。JFinal 是基于 Java 语言的极速 WEB + ORM 框架，其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率！为您节约更多时间，去陪恋人、家人和朋友 :) <br />&nbsp;&nbsp;&nbsp;&nbsp; 然后花费了３天时间研究下框架，正好帮朋友做一个公司网站，感觉框架不错。<strong>附实例网站</strong>（后面的文章将贴上源代码）</p>
<p>　　公司名称：<a href="http://www.bjffjy.com" target="_blank">北京丰帆佳宇运输有限公司<br /></a>&nbsp;&nbsp; 　公司简介：渣土消纳证办理,大型支护土方深度开挖,矿山暗挖,基坑开挖,建筑垃圾清运,渣土清运,砂石料配送,工程机械租赁业务<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 公司网址：<a href="http://www.bjffjy.com/" target="_blank">www.bjffjy.com</a></p><img src ="http://www.blogjava.net/xcp/aggbug/417748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2014-09-07 20:14 <a href="http://www.blogjava.net/xcp/archive/2014/09/07/417748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>微博返回顶部</title><link>http://www.blogjava.net/xcp/archive/2013/05/02/398682.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Thu, 02 May 2013 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2013/05/02/398682.html</guid><description><![CDATA[
&lt;!-- 回到顶部--&gt;<br />&lt;style&gt;<br />&nbsp;&nbsp;a.W_gotop {<br />&nbsp;&nbsp;&nbsp;display: none;<br />&nbsp;&nbsp;&nbsp;position: fixed;<br />&nbsp;&nbsp;&nbsp;_position: absolute;<br />&nbsp;&nbsp;&nbsp;width: 22px;<br />&nbsp;&nbsp;&nbsp;height: 85px;<br />&nbsp;&nbsp;&nbsp;line-height: 12px;<br />&nbsp;&nbsp;&nbsp;left: 50%;<br />&nbsp;&nbsp;&nbsp;bottom: 100px;<br />&nbsp;&nbsp;&nbsp;margin-left: 500px;<br />&nbsp;&nbsp;&nbsp;&nbsp; margin-bottom: 5px;<br />&nbsp;&nbsp;&nbsp;&nbsp; background-color: #F2F2F2;<br />&nbsp;&nbsp;&nbsp;&nbsp; border: 1px solid #CCCCCC;<br />&nbsp;&nbsp;&nbsp;&nbsp; border-radius:2px;<br />&nbsp;&nbsp;&nbsp;&nbsp; text-align: center;<br />&nbsp;&nbsp;&nbsp;&nbsp; text-decoration: none;<br />&nbsp;}<br />&nbsp;a.W_gotop span {<br />&nbsp;&nbsp;&nbsp;cursor: pointer;<br />&nbsp;&nbsp;&nbsp;&nbsp; display: block;<br />&nbsp;&nbsp;&nbsp;&nbsp; height: 73px;<br />&nbsp;&nbsp;&nbsp;&nbsp; padding-top: 10px;<br />&nbsp;&nbsp;&nbsp;&nbsp; border: 1px solid #FFFFFF;<br />&nbsp;&nbsp;&nbsp;&nbsp; text-decoration: none;<br />&nbsp;}<br />&nbsp;a.W_gotop em {<br />&nbsp;&nbsp;&nbsp;&nbsp; cursor: pointer;<br />&nbsp;&nbsp;&nbsp;&nbsp; text-decoration: none;<br />&nbsp;&nbsp;&nbsp;&nbsp; font-style: normal;<br />&nbsp;&nbsp;&nbsp; &nbsp;font-weight: normal;<br />&nbsp;}<br />&nbsp;.icon_gotop{<br />&nbsp;&nbsp;&nbsp; background: url(images/gotop.png) no-repeat;<br />&nbsp;}<br />&nbsp;.W_gotop:hover .icon_gotop {<br />&nbsp;&nbsp; background: url(images/gotop_focus.png) no-repeat;<br />&nbsp;}<br />&nbsp;.W_ico {<br />&nbsp;&nbsp;display: inline-block;<br />&nbsp;&nbsp;&nbsp; height: 12px;<br />&nbsp;&nbsp;&nbsp; width: 12px;<br />&nbsp;&nbsp;&nbsp; margin-bottom: 5px;<br />&nbsp;}<br />&nbsp;.W_txt{<br />&nbsp;&nbsp;&nbsp; color: #808080;<br />&nbsp;}<br />&lt;/style&gt;<br />&lt;a id="base_scrollToTop" class="W_gotop" style="visibility: visible;"&gt;<br />&lt;span&gt;<br />&nbsp;&lt;em class="W_ico icon_gotop"&gt;&lt;/em&gt;<br />&nbsp;&lt;em class="W_txt"&gt;返回顶部&lt;/em&gt;<br />&lt;/span&gt;<br />&lt;/a&gt;<br /><br />&lt;script type="text/javascript"&gt;<br />$(function(){<br />&nbsp;var gotop = $(".W_gotop")<br />&nbsp;gotop.click(function(){<br />&nbsp;&nbsp;$("html,body").animate({scrollTop:0},500)<br />&nbsp;});<br />&nbsp;<br />&nbsp;$(window).scroll(function(){<br />　　if($.browser.msie &amp;&amp; ($.browser.version == "6.0") &amp;&amp; !$.support.style){//如果IE6<br />　　&nbsp;gotop.css({"top":($(window).scrollTop()+$(window).height()-100)+"px","position":"absolute"});<br />　　}<br />　　if($(window).scrollTop()&lt;=50){<br />　　&nbsp;gotop.fadeOut();<br />　　}else{<br />　　&nbsp;gotop.fadeIn();<br />　　}<br />　});<br />}); 
<img src ="http://www.blogjava.net/xcp/aggbug/398682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2013-05-02 16:49 <a href="http://www.blogjava.net/xcp/archive/2013/05/02/398682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 反向索引</title><link>http://www.blogjava.net/xcp/archive/2013/04/27/398512.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Sat, 27 Apr 2013 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2013/04/27/398512.html</guid><description><![CDATA[create index I_INFO_CLASSID on b_info(CLASSID);<br />create index I_INFO_CLASSID_REVERSE on b_info(reverse(CLASSID));<br />analyze table b_info compute statistics for table for all indexes;<br />--都使用索引<br />select * from b_info where classid like '1E92C5409E99484%';<br />--都使用索引<br />select * from b_info where reverse(classid) like reverse('%33B27');<img src ="http://www.blogjava.net/xcp/aggbug/398512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2013-04-27 17:05 <a href="http://www.blogjava.net/xcp/archive/2013/04/27/398512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE6 list-style-type li的第一条不显示设置的列表类型</title><link>http://www.blogjava.net/xcp/archive/2013/04/12/397756.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Fri, 12 Apr 2013 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2013/04/12/397756.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/397756.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2013/04/12/397756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/397756.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/397756.html</trackback:ping><description><![CDATA[<p style="margin: 0px 0px 10px; padding: 0px; color: #333333; font-family: Verdana, Tahoma, 'BitStream vera Sans', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 17px;">今天，在做毕业设计的时候，做到一个新闻列表的时候，被垃圾IE6样式卡住了！先上一张对比图片。</p><div id="attachment_994"  alignnone"="" style="margin: 0px 0px 5px; padding-top: 5px; padding-bottom: 5px; background-color: #f1f5f6; border: 1px solid #dce3e9; text-align: center; color: #333333; font-family: Verdana, Tahoma, 'BitStream vera Sans', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 17px; width: 416px;"><a href="http://thobian.info/wp-content/uploads/2011/12/chrom-IE6.jpg" style="margin: 0px; padding: 0px; color: #225588; text-decoration: none;"><img wp-image-994=""  "="" title="chrom-IE6" src="http://thobian.info/wp-content/uploads/2011/12/chrom-IE6.jpg" alt="chrome-IE6效果对比" width="406" height="138" style="margin: 0px 5px; padding: 0px; border: none;" /></a><p style="margin: 3px 0px 0px; padding: 0px 5px !important;">chrome-IE6效果对比</p></div><p style="margin: 0px 0px 10px; padding: 0px; color: #333333; font-family: Verdana, Tahoma, 'BitStream vera Sans', Arial, Helvetica, sans-serif; font-size: 12px; line-height: 17px;">正如，图片上的说明：在IE6（没有测试IE7或更高版本）li标签的第一条&#8220;联系我们&#8221;，没有前面的：点。看一下我的demo代码啊吧~<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text/css"</span><span style="color: #0000FF; ">&gt;</span><span style="background-color: #F5F5F5; color: #800000; "><br />.news-list</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">200px</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;background</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">#0f0</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">}</span><span style="background-color: #F5F5F5; color: #800000; "><br />.news-list&nbsp;ol</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;padding</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">10px&nbsp;10px&nbsp;10px&nbsp;10px</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">}</span><span style="background-color: #F5F5F5; color: #800000; "><br />.news-list&nbsp;li</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;height</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">20px</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;list-style</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">disc&nbsp;inside</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">}</span><span style="background-color: #F5F5F5; color: #800000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="news-list"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ol</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">联系我们</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">关于我们</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">哈哈</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">ol</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span></div><br /><p style="margin: 0px 0px 10px; padding: 0px; font-size: 12px; line-height: 17px;">要触发这个BUG有不少&#8220;要点&#8221;啊！第一 、<span style="margin: 0px; padding: 0px; color: #000000;">.news-list ol{&nbsp;padding:<span style="margin: 0px; padding: 0px; color: #ff0000;"><strong style="margin: 0px; padding: 0px;">10px</strong></span>&nbsp;10px 10px 10px;}</span>&nbsp;这条样式必须要有，更确切的说是第一个&#8220;10px&#8221;必须有，当然你可以换成其他像素值，<span style="margin: 0px; padding: 0px; color: #ff0000;"><strong style="margin: 0px; padding: 0px;">零除外</strong><span style="margin: 0px; padding: 0px; color: #000000;">！当改成0之后这个bug就没有了~，这也就是我为什么把这个分开写，没直接写成：</span></span>.news-list ol{&nbsp;padding:10px ;}，这样的原因。<br style="margin: 0px; padding: 0px;" />第二点、&nbsp;.news-list li{&nbsp;<strong style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; color: #ff0000;">height:20px</span>;&nbsp;</strong>list-style:disc inside;}，这个里面也有一个必要的：高度。当你把这个高度去掉的时候，你会发现这个bug也会消失。</p><p style="margin: 0px 0px 10px; padding: 0px; font-size: 12px; line-height: 17px;">有上面这两个&#8220;苛刻&#8221;的条件，估计也就是为什么很少有人碰到的原因吧！知道了原因解决当然不是问题。从上面的两点就可以很好的解决这bug了。<br style="margin: 0px; padding: 0px;" />方法一、当然就是准对第一个条件的，如果可以去掉<strong style="margin: 0px; padding: 0px;">padding</strong>。<br style="margin: 0px; padding: 0px;" />方法二、当然也是在不影响布局的情况下：去掉&nbsp;<strong style="margin: 0px; padding: 0px;">height<br style="margin: 0px; padding: 0px;" /></strong>方法三、任然还是去掉：.news-list ol{&nbsp;padding:<strong style="margin: 0px; padding: 0px;">10px</strong>&nbsp;10px 10px 10px;} 这条样式，同时在ol标签的父标签（这里的父标签就是&lt;div class=&#8221;news-list&#8221;&gt;了，当然你还可以在这个中间加入一个div）中加入这条样式。这样既不会影响布局，又能很好的解决这个bug，<span style="font-size: 12px; line-height: 17px;">下面是我的第三种解决方法代码：<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">style&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text/css"</span><span style="color: #0000FF; ">&gt;</span><span style="background-color: #F5F5F5; color: #800000; "><br />.news-list</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;width</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">200px</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;background</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">#0f0</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;padding</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">10px&nbsp;10px&nbsp;10px&nbsp;10px</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">}</span><span style="background-color: #F5F5F5; color: #800000; "><br />.news-list&nbsp;li</span><span style="background-color: #F5F5F5; color: #000000; ">{</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;height</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">20px</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;list-style</span><span style="background-color: #F5F5F5; color: #000000; ">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">disc&nbsp;inside</span><span style="background-color: #F5F5F5; color: #000000; ">;</span><span style="background-color: #F5F5F5; color: #FF0000; "><br /></span><span style="background-color: #F5F5F5; color: #000000; ">}</span><span style="background-color: #F5F5F5; color: #800000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">div&nbsp;</span><span style="color: #FF0000; ">class</span><span style="color: #0000FF; ">="news-list"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ol</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">联系我们</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">关于我们</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; ">哈哈</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">li</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">ol</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">div</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">&gt;</span></div></p></p><img src ="http://www.blogjava.net/xcp/aggbug/397756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2013-04-12 16:25 <a href="http://www.blogjava.net/xcp/archive/2013/04/12/397756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>暂放过去、着手现在、放眼未来</title><link>http://www.blogjava.net/xcp/archive/2013/04/03/397336.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Wed, 03 Apr 2013 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2013/04/03/397336.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/397336.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2013/04/03/397336.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/397336.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/397336.html</trackback:ping><description><![CDATA[<div>&nbsp; &nbsp; &nbsp; 这么多年以来，我们无休止的争论一直停留在过去的事情上。总是对过去的事情不停地进行争辩、辩驳。面对现实的问题，只是碰到什么讲什么，没有一点系统性，没有一点完整性。对于过去已经发生的事情，不管过去是对，还是错，该发生的都已经发生，并且已经给予了&#8220;定论&#8221;。对这个定论是满意、还是不满意都可以暂时放在心里、或是暂时不做考虑。当人的认识提高以后，返回来重新认识这些问题，重新思考这些问题，也许就能有比较清晰的思路，得出比较正确的、公正的评论。但现在必须要暂且有停顿的时间。因为不面对现在的事情，现在的又将会成为过去，这样循环往复，一直处于一种对过去的争论是毫无意义的，至少是对现在的发展没有什么必要性。<br />&nbsp; &nbsp; &nbsp;&nbsp;<span style="font-size: 14px;">着手现在的必要性是因为我们现在面对的现实是很严峻的。因此具有有能力的人、有良知的人、有正义的人，应该对现在的现象进行认真的分析与研究，并对现行的现象进行深入细致的剖析，通过这些现象看到这些现象的本质。使人们能认识到现象后的东西，能根据有理有据的分析推出未来的发展。使我们不至于面对未来还是茫然不知，措手不及。<br />&nbsp; &nbsp; &nbsp;&nbsp;</span><span style="font-size: 14px;">面对现实的现在，我们不能采取怄气、激愤的态度。谩骂、讥讽都不能解决实际的问题。面对实际的问题我们应该有深刻的剖析，要有理性的分析。找到这些问题的实质，找到这些问题的根本。我们要寻找事物的本质，抓住本质的问题进行总结规律，使我们能认识到现在事物发展的规律，并进行传播这种认识，使得更多的人能认识到规律，并尽可能的掌握规律，以此来改变我们的生活。<br />&nbsp; &nbsp; &nbsp;&nbsp;</span><span style="font-size: 14px;">放眼未来。不剖析现在，不总结现在发展的规律，就不能有正确的未来发展。我们不能时时处于一种盲目的状态之中。我们总是毫无准备的应付生活，总是面对生活中一切处于一种茫然的状态，一种措手不及的状态。因此，我们时时处于一种被动的地位，总是比事情逼迫的往前走，总是无奈的往前行，或是被人牵着鼻子前行。总是这样的处境，总是这样的不利，皆是因为我们没有对现在的分析，没有认识现在发展的本质规律，以至于才使得我们处于被动。因此，我们要有好的未来，就要抓住现在，要抓住现在，就要对现在进行认真的分析与总结。<br />&nbsp; &nbsp; &nbsp;</span><span style="font-size: 14px;">&nbsp;总之，我们应该对过去发成的事情即便心怀不满，也要尽可能能使自己有一种&#8220;胸怀&#8221;，把过去暂放起来。不要沉迷于过去，而丢失现在，使得现在变成过去，时时走不出过去，而耽误现在的认识。没有现在的深刻认识，我们必将没有好的未来。现在不进行认真的分析，最终把将来又变成现在。我们不能一直处于被动之中，要解脱这种处境。所以我们需要：暂放过去、着手现在、放眼未来！</span></div><img src ="http://www.blogjava.net/xcp/aggbug/397336.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2013-04-03 10:31 <a href="http://www.blogjava.net/xcp/archive/2013/04/03/397336.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中的动态SQL</title><link>http://www.blogjava.net/xcp/archive/2013/04/02/397279.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Tue, 02 Apr 2013 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2013/04/02/397279.html</guid><description><![CDATA[<div>http://www.cnblogs.com/gaolonglong/archive/2011/05/31/2064790.html<br /><div>http://www.blogjava.net/cheneyfree/archive/2007/12/17/168272.html<br /><br /><br />记住：select的时候就不需要<span style="background-color: #eeeeee; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 12.727272033691406px;">returning&nbsp;<br />例：</span><span style="font-size: 14px;">&nbsp;execute immediate T_SQL into T_COUNT;</span></div></div><img src ="http://www.blogjava.net/xcp/aggbug/397279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2013-04-02 13:20 <a href="http://www.blogjava.net/xcp/archive/2013/04/02/397279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle查询所有用户表的表名、主键名称、索引、外键等</title><link>http://www.blogjava.net/xcp/archive/2013/04/02/397265.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Tue, 02 Apr 2013 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2013/04/02/397265.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/397265.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2013/04/02/397265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/397265.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/397265.html</trackback:ping><description><![CDATA[1、查找表的所有索引（包括索引名，类型，构成列）：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">select</span>&nbsp;t.<span style="color: #808080; ">*</span>,i.index_type&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_ind_columns&nbsp;t,user_indexes&nbsp;i&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;t.index_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;i.index_name&nbsp;<span style="color: #808080; ">and</span>&nbsp;t.table_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;i.table_name&nbsp;<span style="color: #808080; ">and</span>&nbsp;t.table_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;要查询的表&nbsp;</div>
<div>2、查找表的主键（包括名称，构成列）：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">select</span>&nbsp;cu.<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_cons_columns&nbsp;cu,&nbsp;user_constraints&nbsp;au&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;cu.constraint_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;au.constraint_name&nbsp;<span style="color: #808080; ">and</span>&nbsp;au.constraint_type&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">P</span><span style="color: #FF0000; ">'</span>&nbsp;<span style="color: #808080; ">and</span>&nbsp;au.table_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;要查询的表&nbsp;</div>
<div>3、查找表的唯一性约束（包括名称，构成列）：&nbsp;<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">select</span>&nbsp;column_name&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_cons_columns&nbsp;cu,&nbsp;user_constraints&nbsp;au&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;cu.constraint_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;au.constraint_name&nbsp;<span style="color: #808080; ">and</span>&nbsp;au.constraint_type&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">U</span><span style="color: #FF0000; ">'</span>&nbsp;<span style="color: #808080; ">and</span>&nbsp;au.table_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;要查询的表&nbsp;</div>
<div>4、查找表的外键（包括名称，引用表的表名和对应的键名，下面是分成多步查询）：&nbsp;<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_constraints&nbsp;c&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;c.constraint_type&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">R</span><span style="color: #FF0000; ">'</span>&nbsp;<span style="color: #808080; ">and</span>&nbsp;c.table_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;要查询的表&nbsp;</div>
<div>5、查询外键约束的列名：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_cons_columns&nbsp;cl&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;cl.constraint_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;外键名称&nbsp;</div>
<div>6、查询引用表的键的列名：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_cons_columns&nbsp;cl&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;cl.constraint_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;外键引用表的键名 &nbsp; &nbsp; &nbsp;</div><br />实例：<br />7、查询没有建立主键的表　<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;u.table_name,&nbsp;u.num_rows<br />&nbsp;&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_tables&nbsp;u<br />&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;<span style="color: #808080; ">not</span>&nbsp;<span style="color: #808080; ">exists</span>&nbsp;(<span style="color: #0000FF; ">select</span>&nbsp;cu.table_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_cons_columns&nbsp;cu,&nbsp;user_constraints&nbsp;au<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;cu.constraint_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;au.constraint_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">and</span>&nbsp;au.constraint_type&nbsp;<span style="color: #808080; ">=</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">P</span><span style="color: #FF0000; ">'</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">and</span>&nbsp;au.table_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;u.table_name)<br />&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">and</span>&nbsp;u.num_rows&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #808080; ">not</span>&nbsp;<span style="color: #0000ff;">null</span><br />&nbsp;<span style="color: #0000FF; ">order</span>&nbsp;<span style="color: #0000FF; ">by</span>&nbsp;u.num_rows&nbsp;<span style="color: #0000FF; ">desc</span>;</div>8、查询表记录中有空值的索引字段<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;Create&nbsp;table</span><span style="color: #008080; "><br /></span><span style="color: #0000FF; ">create</span>&nbsp;<span style="color: #0000FF; ">table</span>&nbsp;TEMP_INDEX<br />(<br />&nbsp;&nbsp;ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-weight: bold;">VARCHAR2</span>(<span style="color: #800000; font-weight: bold; ">32</span>),<br />&nbsp;&nbsp;TABLE_NAME&nbsp;&nbsp;<span style="font-weight: bold;">VARCHAR2</span>(<span style="color: #800000; font-weight: bold; ">100</span>),<br />&nbsp;&nbsp;COLUMN_NAME&nbsp;<span style="font-weight: bold;">VARCHAR2</span>(<span style="color: #800000; font-weight: bold; ">100</span>),<br />&nbsp;&nbsp;INDEX_NAME&nbsp;&nbsp;<span style="font-weight: bold;">VARCHAR2</span>(<span style="color: #800000; font-weight: bold; ">100</span>),<br />&nbsp;&nbsp;SCSJ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATE<br />)<br />tablespace&nbsp;JG_ZFGFH<br />&nbsp;&nbsp;pctfree&nbsp;<span style="color: #800000; font-weight: bold; ">10</span><br />&nbsp;&nbsp;initrans&nbsp;<span style="color: #800000; font-weight: bold; ">1</span><br />&nbsp;&nbsp;maxtrans&nbsp;<span style="color: #800000; font-weight: bold; ">255</span><br />&nbsp;&nbsp;storage<br />&nbsp;&nbsp;(<br />&nbsp;&nbsp;&nbsp;&nbsp;initial&nbsp;<span style="color: #800000; font-weight: bold; ">16</span><br />&nbsp;&nbsp;&nbsp;&nbsp;minextents&nbsp;<span style="color: #800000; font-weight: bold; ">1</span><br />&nbsp;&nbsp;&nbsp;&nbsp;maxextents&nbsp;unlimited<br />&nbsp;&nbsp;);<br /><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;Add&nbsp;comments&nbsp;to&nbsp;the&nbsp;table&nbsp;</span><span style="color: #008080; "><br /></span>comment&nbsp;<span style="color: #0000FF; ">on</span>&nbsp;<span style="color: #0000FF; ">table</span>&nbsp;TEMP_INDEX<br />&nbsp;&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">放入索引值有空的表和列</span><span style="color: #FF0000; ">'</span>;<br /><span style="color: #008080; ">--</span><span style="color: #008080; ">&nbsp;Add&nbsp;comments&nbsp;to&nbsp;the&nbsp;columns&nbsp;</span><span style="color: #008080; "><br /></span>comment&nbsp;<span style="color: #0000FF; ">on</span>&nbsp;<span style="color: #0000FF; ">column</span>&nbsp;TEMP_INDEX.ID<br />&nbsp;&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">自动生成</span><span style="color: #FF0000; ">'</span>;<br />comment&nbsp;<span style="color: #0000FF; ">on</span>&nbsp;<span style="color: #0000FF; ">column</span>&nbsp;TEMP_INDEX.TABLE_NAME<br />&nbsp;&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">表名</span><span style="color: #FF0000; ">'</span>;<br />comment&nbsp;<span style="color: #0000FF; ">on</span>&nbsp;<span style="color: #0000FF; ">column</span>&nbsp;TEMP_INDEX.COLUMN_NAME<br />&nbsp;&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">字段名称</span><span style="color: #FF0000; ">'</span>;<br />comment&nbsp;<span style="color: #0000FF; ">on</span>&nbsp;<span style="color: #0000FF; ">column</span>&nbsp;TEMP_INDEX.INDEX_NAME<br />&nbsp;&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">索引名称</span><span style="color: #FF0000; ">'</span>;<br />comment&nbsp;<span style="color: #0000FF; ">on</span>&nbsp;<span style="color: #0000FF; ">column</span>&nbsp;TEMP_INDEX.SCSJ<br />&nbsp;&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">生成时间</span><span style="color: #FF0000; ">'</span>;</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">create</span>&nbsp;<span style="color: #808080; ">or</span>&nbsp;<span style="color: #FF00FF; ">replace</span>&nbsp;<span style="color: #0000FF; ">procedure</span>&nbsp;P_PROCESS_INDEX<br /><span style="color: #008080; ">/*</span><span style="color: #008080; ">********************************************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-----------功能：得到表索引字段中有空值字段<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-----------作者: Xcp<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-----------创建日期：2013-02-20<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-----------版本&nbsp;v1.0<br />&nbsp;&nbsp;******************************************************************************</span><span style="color: #008080; ">*/</span><br />&nbsp;<span style="color: #0000FF; ">is</span><br />&nbsp;&nbsp;<span style="color: #0000FF; ">cursor</span>&nbsp;T_INDEX_CURSOR&nbsp;<span style="color: #0000FF; ">is</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">select</span>&nbsp;i.table_name,&nbsp;t.column_name,&nbsp;t.index_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_ind_columns&nbsp;t,&nbsp;user_indexes&nbsp;i,&nbsp;user_tab_cols&nbsp;c<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">where</span>&nbsp;t.index_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;i.index_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">and</span>&nbsp;t.column_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;c.column_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">and</span>&nbsp;t.table_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;i.table_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #808080; ">and</span>&nbsp;c.table_name&nbsp;<span style="color: #808080; ">=</span>&nbsp;i.table_name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">order</span>&nbsp;<span style="color: #0000FF; ">by</span>&nbsp;c.column_id;<br />&nbsp;&nbsp;T_COUNT&nbsp;<span style="font-weight: bold;">number</span>:<span style="color: #808080; ">=</span><span style="color: #800000; font-weight: bold; ">0</span>;<br />&nbsp;&nbsp;T_SQL&nbsp;&nbsp;&nbsp;<span style="font-weight: bold;">varchar2</span>(<span style="color: #800000; font-weight: bold; ">1000</span>);<br />&nbsp;&nbsp;T_PRE_TABLE_NAME&nbsp;<span style="font-weight: bold;">varchar2</span>(<span style="color: #800000; font-weight: bold; ">100</span>);<br /><span style="color: #0000FF; ">begin</span><br />&nbsp;&nbsp;<span style="color: #008080; ">--</span><span style="color: #008080; ">清空记录保存表</span><span style="color: #008080; "><br /></span>&nbsp;&nbsp;<span style="color: #0000FF; ">delete</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;TEMP_INDEX;<br />&nbsp;&nbsp;<span style="color: #0000FF; ">commit</span>;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<span style="color: #008080; ">--</span><span style="color: #008080; ">重新清理</span><span style="color: #008080; "><br /></span>&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;T_INDEX&nbsp;<span style="color: #808080; ">in</span>&nbsp;T_INDEX_CURSOR&nbsp;loop<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080; ">--</span><span style="color: #008080; ">事务控制，每个表提交一次</span><span style="color: #008080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;T_PRE_TABLE_NAME&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;<span style="color: #0000FF; ">then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T_PRE_TABLE_NAME:<span style="color: #808080; ">=</span>T_INDEX.Table_Name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elsif&nbsp;T_PRE_TABLE_NAME<span style="color: #808080; ">&lt;&gt;</span>T_INDEX.Table_Name&nbsp;<span style="color: #0000FF; ">then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">commit</span>;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">end</span>&nbsp;<span style="color: #0000FF; ">if</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080; ">--</span><span style="color: #008080; ">求是该索引字段是否有空</span><span style="color: #008080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">begin</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T_SQL:<span style="color: #808080; ">=</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">select&nbsp;count(1)&nbsp;&nbsp;from&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span>T_INDEX.TABLE_NAME<span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">&nbsp;where&nbsp;</span><span style="color: #FF0000; ">'</span><span style="color: #808080; ">||</span>T_INDEX.Column_Name<span style="color: #808080; ">||</span><span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">&nbsp;is&nbsp;null&nbsp;</span><span style="color: #FF0000; ">'</span>&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080; ">--</span><span style="color: #008080; ">dbms_output.put_line(T_SQL);</span><span style="color: #008080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">execute</span>&nbsp;immediate&nbsp;T_SQL&nbsp;<span style="color: #0000FF; ">into</span>&nbsp;T_COUNT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008080; ">--</span><span style="color: #008080; ">dbms_output.put_line(T_COUNT)&nbsp;;&nbsp;&nbsp;</span><span style="color: #008080; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;T_COUNT<span style="color: #808080; ">&gt;</span><span style="color: #800000; font-weight: bold; ">0</span>&nbsp;<span style="color: #0000FF; ">then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">insert</span>&nbsp;<span style="color: #0000FF; ">into</span>&nbsp;TEMP_INDEX&nbsp;<span style="color: #0000FF; ">values</span>(sys_guid(),T_INDEX.Table_Name,T_INDEX.COLUMN_NAME,T_INDEX.Index_Name,sysdate);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">end</span>&nbsp;<span style="color: #0000FF; ">if</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exception<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">when</span>&nbsp;others&nbsp;<span style="color: #0000FF; ">then</span>&nbsp;dbms_output.put_line(<span style="color: #FF0000; ">'</span><span style="color: #FF0000; ">NO&nbsp;DATA&nbsp;FOUND!</span><span style="color: #FF0000; ">'</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">end</span>;<br />&nbsp;&nbsp;<span style="color: #0000FF; ">end</span>&nbsp;loop;&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<span style="color: #008080; ">--</span><span style="color: #008080; ">事务控制，最后一个表的事务</span><span style="color: #008080; "><br /></span>&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;T_INDEX_CURSOR<span style="color: #808080; ">%</span>NOTFOUND&nbsp;<span style="color: #0000FF; ">then</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">commit</span>;<br />&nbsp;&nbsp;<span style="color: #0000FF; ">end</span>&nbsp;<span style="color: #0000FF; ">if</span>;<br /><span style="color: #0000FF; ">end</span>&nbsp;P_PROCESS_INDEX;</div></div>
</div>
</div>
</div>
</div><img src ="http://www.blogjava.net/xcp/aggbug/397265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2013-04-02 09:53 <a href="http://www.blogjava.net/xcp/archive/2013/04/02/397265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j 获取动态参数</title><link>http://www.blogjava.net/xcp/archive/2012/11/06/390894.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Tue, 06 Nov 2012 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/11/06/390894.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/390894.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/11/06/390894.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/390894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/390894.html</trackback:ping><description><![CDATA[<p>在log中必须先了解log4j自带的两个类MDC和NDC</p><p>NDC和MDC是log4j用于存储应用程序的上下文信息（context infomation），从而便于在log中使用这些上下文信息。<br />NDC采用了一个类似栈的机制来push存储上下文信息，每一个线程都独立地储存上下文信息。比如说一个servlet就可以针对每一个request创建对应的NDC，储存客户端地址等等信息。相关的信息使用NDC.push(message);<br />在log的时候将信息输出。在相应的PatternLayout中使用&#8221;%x&#8221;来输出存储的上下文信息</p><p>例如：String remoteAddr = request.getRemoteAddr();<br />NDC.push(remoteAddr);<br />在log4j.properties文件中作如下的配置即可<br />log4j.appender.console.layout.ConversionPattern=%-d{yyyy/MM/dd HH:mm:ss,SSS} [<span style="color: red;"><strong>%X</strong></span>] -[%c]-[%p] %m%n</p><p><br />&nbsp;</p><p><br />MDC内部使用了类似map的机制来存储信息，相对应的方法，MDC.put(key,value);在配置PatternLayout的时候使用：%x{key}来输出对应的value<br />例如：String remoteAddr = request.getRemoteAddr();<br />MDC.put("ip", remoteAddr); <br />在log4j.properties文件中作如下的配置即可<br />log4j.appender.console.layout.ConversionPattern=%-d{yyyy/MM/dd HH:mm:ss,SSS} [<span style="color: red;"><strong>%X{ip}</strong></span>] -[%c]-[%p] %m%n<br /></p><p>总：如果在项目中有过滤器或者模板Action,你可以把获取公共的属性方法直接定义在里面，然后在配置文件中配置获取显示</p><img src ="http://www.blogjava.net/xcp/aggbug/390894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-11-06 16:34 <a href="http://www.blogjava.net/xcp/archive/2012/11/06/390894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ehcache实例 </title><link>http://www.blogjava.net/xcp/archive/2012/08/30/386562.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Thu, 30 Aug 2012 01:33:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/08/30/386562.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/386562.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/08/30/386562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/386562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/386562.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ehcache.xml说明：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->01.&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&nbsp;&nbsp;02.&nbsp;&nbsp;03.&...&nbsp;&nbsp;<a href='http://www.blogjava.net/xcp/archive/2012/08/30/386562.html'>阅读全文</a><img src ="http://www.blogjava.net/xcp/aggbug/386562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-08-30 09:33 <a href="http://www.blogjava.net/xcp/archive/2012/08/30/386562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2和servlet的共存问题</title><link>http://www.blogjava.net/xcp/archive/2012/08/05/384824.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Sun, 05 Aug 2012 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/08/05/384824.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/384824.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/08/05/384824.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/384824.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/384824.html</trackback:ping><description><![CDATA[<p><font color="#0000ff">先看一下struts2 的web.xml文件：<br /></font><font color="#0000ff">&lt;filter&gt;<br />&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />&lt;filter-class&gt;<br />org.apache.struts2.dispatcher.FilterDispatcher<br />&lt;/filter-class&gt;<br />&lt;/filter&gt;</font></p><p><font color="#0000ff">&lt;filter-mapping&gt;<br />&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br />&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br /></font><font color="#0000ff">在请求应用时，struts2将会截获所有请求，对于servlet请求将不能够正常相应,是struts2把servlet当成act<wbr>ion了，因为servlet和act<wbr>ion都是没有后缀的</font></p><br /><p><font color="#0000ff">解决方法目前有四种：</font></p><p><font color="#0000ff">方法1：统一在servlet后面加上.servlet（包括web.xml配置文件中和页面上使用servlet的地方）</font></p><p><font color="#0000ff">方法2：继承StrutsPrepareAndExecuteF<wbr>ilter,实现以下两个方法。</font></p><p><font color="#0000ff">public void init(FilterConfig filterConfig) throws <br />ServletException {<br /></font><font color="#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..............................</font></p><p><font color="#0000ff">}</font></p><p><font color="#0000ff">public void doFilter(ServletRequest request, 
ServletResponse response,<br /> <wbr> <wbr> <wbr>FilterChain chain) throws <br />IOException, ServletException {<br /></font><font color="#0000ff">............................... <br /></font><font color="#0000ff">if(url.contain("servlet")){<br /></font><font color="#0000ff">((HttpServletResponse) response).sendRedirect(redirectUrl);<br /></font><font color="#0000ff">}</font></p><p><font color="#0000ff">super.doFilter(request, response, chain);</font></p><br /><p><font color="#0000ff">}</font></p><br /><p><font color="#0000ff">方法3：修改拦截页面配置<br /></font><font color="#0000ff">原：<br /></font><font color="#0000ff">&lt;filter&gt;<br /> <wbr> <wbr>&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br /> <wbr> <wbr>&lt;filter-class&gt;<br /> <wbr> <wbr> <wbr>org.apache.struts2.dispatcher.FilterDispatcher<br /> <wbr> <wbr>&lt;/filter-class&gt;<br /> <wbr>&lt;/filter&gt;<br /> <wbr>&lt;filter-mapping&gt;<br /> <wbr> <wbr>&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br /> <wbr> <wbr>&lt;url-pattern&gt; <br />/* &lt;/url-pattern&gt;<br /> <wbr>&lt;/filter-mapping&gt;<br /><br /></font><font color="#0000ff">现：<br /><br /></font><font color="#0000ff">&lt;filter-mapping&gt;<br /> <wbr> <br />&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br /> <wbr> <br />&lt;url-pattern&gt;*.act<wbr>ion&lt;/url-pattern&gt;<br /> <wbr>&lt;/filter-mapping&gt;<br /> <wbr>&lt;filter-mapping&gt;<br /> <wbr> <br />&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br /> <wbr> <br />&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;<br /> <wbr>&lt;/filter-mapping&gt;<br /> <wbr>&lt;filter-mapping&gt;<br /> <wbr> <br />&lt;filter-name&gt;struts2&lt;/filter-name&gt;<br /> <wbr> <br />&lt;url-pattern&gt;/user/*&lt;/url-pattern&gt;<br /> <wbr>&lt;/filter-mapping&gt;</font></p><br /><p><font color="#0000ff">servlet的请求路径不必改变</font></p><br /><p><font color="#0000ff">方法4：在struts.xml文件中修改</font><br /></p><p><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=4b6f8d150100ghu4&amp;url=http://s2.sinaimg.cn/orignal/4b6f8d15t7c79a7b2b6f1&amp;690" rel="nofollow" target="_blank"><font color="#0000ff"><img title="struts2拦截了servlet请求的解决" alt="struts2拦截了servlet请求的解决" src="http://img.ph.126.net/Cxc_WRxuo2JGnBwYJ61AcQ==/1609192441856277805.jpg" /></font></a><font color="#0000ff">&nbsp;</font><br /></p><p style="text-indent: 2em;"><font color="#0000ff">&#8230;&#8230;</font></p><img src ="http://www.blogjava.net/xcp/aggbug/384824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-08-05 17:24 <a href="http://www.blogjava.net/xcp/archive/2012/08/05/384824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>test</title><link>http://www.blogjava.net/xcp/archive/2012/07/31/384446.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Tue, 31 Jul 2012 07:39:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/07/31/384446.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/384446.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/07/31/384446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/384446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/384446.html</trackback:ping><description><![CDATA[<p style="margin-left:21.0pt;text-indent:-21.0pt;">一、<span style="font-family: 宋体;">框架的搭建</span></p>  <p style="margin-left:42.0pt;text-indent:-21.0pt;">1.<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">框架技术（</span>Struts2.3.4+Srping3.2+Mybatis3.2<span style="font-family: 宋体;">）</span></p>  <p style="margin-left:63.0pt;text-indent:-63.0pt;"><span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>i.<span style="font-size: 7pt; line-height: normal; font-family: 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;">添加框架</span>Struts2.3.4 </p>  <p style="margin-left:84.0pt;text-indent:-21.0pt;"><span style="font-family:Wingdings;">&#216;&nbsp;</span><span style="font-family:宋体;">清理</span>lib</p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;">二、<span style="font-family: 宋体;">框架的使用</span></p>  <p style="margin-left:21.0pt;text-indent:-21.0pt;"><img width="554" height="288" src="file:///C:/Users/XCP/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg" v:shapes="图片_x0020_1"  alt="" /></p><img src ="http://www.blogjava.net/xcp/aggbug/384446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-07-31 15:39 <a href="http://www.blogjava.net/xcp/archive/2012/07/31/384446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MYEclipse启动应用服务 自动进入DEBUG视图</title><link>http://www.blogjava.net/xcp/archive/2012/07/30/384344.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Mon, 30 Jul 2012 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/07/30/384344.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/384344.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/07/30/384344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/384344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/384344.html</trackback:ping><description><![CDATA[<span style="font-family: simsun; line-height: 23px; text-align: left; background-color: #ffffff; ">window-&gt; preference-&gt; run/debug-&gt; perspectives &nbsp; open &nbsp; the &nbsp; associated &nbsp; perspective &nbsp; ....&nbsp;</span><span style="font-family: simsun; line-height: 23px; text-align: left; background-color: #ffffff; ">选never,或prompt</span><img src ="http://www.blogjava.net/xcp/aggbug/384344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-07-30 17:15 <a href="http://www.blogjava.net/xcp/archive/2012/07/30/384344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于log4j的日志文件保存位置解决方案 （转）</title><link>http://www.blogjava.net/xcp/archive/2012/07/24/383837.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Tue, 24 Jul 2012 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/07/24/383837.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/383837.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/07/24/383837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/383837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/383837.html</trackback:ping><description><![CDATA[以DailyRollingFileAppender 为例：假设每天一个日志文件<br />有以下设置：<br /><br />log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender <br />log4j.appender.A1.File=app.log<br />log4j.appender.A1.DatePattern='.'yyyy-MM-dd<br />log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br />log4j.appender.A1.layout.ConversionPattern=%d %5p - %c -%-4r [%t]&nbsp;&nbsp;&nbsp; - %m%n<br /><br />此时生成日志文件将位于tomcat的bin目录下，如要将日志文件保存在 ：根目录/web-info/logs/下，个人有以下4种解决方案：<br />1 绝对路径<br />log4j.appender.A1.File=D:\apache-tomcat-6.0.18/webapps/项目/WEB-INF/logs/app.log<br />但这种写法灵活性很差<br /><br />以下3中使用相同的设置原理： jvm的环境变量<br /> 2：spring的Log4jConfigListener<br />通过以下配置：<br />&lt;context-param&gt;<br />&nbsp;&nbsp;&nbsp; &lt;param-name&gt;webAppRootKey&lt;/param-name&gt;<br />&nbsp;&nbsp;&nbsp; &lt;param-value&gt;webApp.root&lt;/param-value&gt;<br />&nbsp; &lt;/context-param&gt;<br /> &lt;context-param&gt;<br />&nbsp; &lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt;<br />&nbsp;&nbsp;&nbsp; &lt;param-value&gt;classpath:log4j.properties&lt;/param-value&gt;<br /> &lt;/context-param&gt;<br />&lt; listener&gt;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;org.springframework.web.util.Log4jConfigListener&lt;/listener-class&gt; <br /> &lt;/listener&gt;<br />...<br />log4j.appender.logfile.File=${webApp.root}/WEB-INF/logs/app.log<br />...<br />来解决<br /> 2:使用已有jvm变量：<br />例如：<br />&nbsp;&nbsp;&nbsp; log4j.appender.logfile.File=${user.home}/logs/app.log<br />&nbsp; 日志将位于：例如windows：C:\Documents and Settings\joe\logs\app.log<br /><br />3 自己设置目录，也就是在项目启动时通过System.setProperty设置<br />通过实现ServletContextListener来解决：例如<br /><p>public class log4jlistener implements ServletContextListener {</p><p> public static final String log4jdirkey = "log4jdir";<br /> public void contextDestroyed(ServletContextEvent servletcontextevent) {<br />&nbsp; System.getProperties().remove(log4jdirkey);</p><p> }</p><p> public void contextInitialized(ServletContextEvent servletcontextevent) {<br />&nbsp; String log4jdir = servletcontextevent.getServletContext().getRealPath("/");<br />&nbsp; //System.out.println("log4jdir:"+log4jdir);<br />&nbsp; System.setProperty(log4jdirkey, log4jdir);</p><p> }</p><p>}<br />web.xml配置：<br /></p>&lt;listener&gt;<br />&nbsp; &lt;listener-class&gt;com.log4j.log4jlistener&lt;/listener-class&gt;<br /> &lt;/listener&gt;<br /><br />log4j.prtperties 配置：<br />log4j.appender.A1.File=${log4jdir}/WEB-INF/logs/app1.log来解决。<br /><br />参数配置：<br /><a href="http://hi.baidu.com/zhy65991/blog/item/4af01d090e4353dc63d98635.html">http://hi.baidu.com/zhy65991/blog/item/4af01d090e4353dc63d98635.html</a><br /><img src ="http://www.blogjava.net/xcp/aggbug/383837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-07-24 15:06 <a href="http://www.blogjava.net/xcp/archive/2012/07/24/383837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Myeclipse 安装Aptana3.2 插件</title><link>http://www.blogjava.net/xcp/archive/2012/07/23/383753.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Mon, 23 Jul 2012 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/07/23/383753.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/383753.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/07/23/383753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/383753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/383753.html</trackback:ping><description><![CDATA[
<div style="margin: 0px; font-family: verdana; font-size: 12px; word-break: normal !important;" id="cnblogs_post_body"><p>安装步骤：</p><p>1、下载aptana3.2 Eclipse Plugin插件.</p><p>下载地址：<a style="color: rgb(169, 23, 24); text-decoration: none;" href="http://update1.aptana.org/studio/3.2/024747/index.html">http://update1.aptana.org/studio/3.2/024747/index.html</a></p><p><br />2、解压出features与plugins文件夹,COPY到</p><p>D:\Program Files\MyEclipse Blue Edition\MyPlugins\aptana3.2</p><p>&nbsp;</p><p>3、在D:\Program Files\MyEclipse Blue Edition\MyEclipse Blue Edition 9.0 M2\dropins在新建文件aptana.link, 内容是</p><p><span style="color: rgb(255, 0, 0);">path=D:\\Program Files\\MyEclipse Blue Edition\\MyPlugins\\aptana3.2</span>&nbsp; （注意斜线的方向，反了不行！Myeclipse会找不到路径！）</p><p><br />4、删除D:\Program Files\MyEclipse Blue Edition\MyEclipse Blue Edition 9.0 M2\configuration文件夹中org.eclipse.update文件夹</p><p>&nbsp;</p><p>5、重启 Myeclipse，看到了界面</p><p><img style="border: 0px currentColor; width: 745.91px; height: 399.04px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="09" border="0" alt="09" src="http://images.cnblogs.com/cnblogs_com/yinger/201108/201108290022198978.png" width="745" height="399" /></p><p>&nbsp;</p><p>2. 配置：</p><p>配置 Code Assist，对我来说很重要，Javascript学的不咋地啊</p><p><img style="margin: 0px; border: 0px currentColor; width: 745.57px; height: 593.54px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="07" border="0" alt="07" src="http://images.cnblogs.com/cnblogs_com/yinger/201108/201108290022252810.png" width="745" height="593" /></p><p>&nbsp;</p><p>配置 File Association，文件关联，主要有 htm，html，xml，javascript，css（这个没找到）&nbsp;&nbsp; 【貌似不支持使用Aptana Editor 来打开JSP文件】</p><p><img style="margin: 0px; border: 0px currentColor; width: 762.49px; height: 607.6px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="08" border="0" alt="08" src="http://images.cnblogs.com/cnblogs_com/yinger/201108/201108290022295728.png" width="762" height="607" /></p><p>&nbsp;</p><p>再配置一些设置之后，重启Myeclipse，试试看，打开一个 html，呵呵，js有代码提示帮助，Enjoy it！</p><p><img style="border: 0px currentColor; width: 768.19px; height: 411.42px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="010" border="0" alt="010" src="http://images.cnblogs.com/cnblogs_com/yinger/201108/201108290022374870.png" width="768" height="411" /></p></div><div style="margin: 10px 0px 0px; font-family: verdana; font-size: 12px;" id="MySignature"></div><div style="margin: 20px 0px 0px; font-family: verdana; font-size: 12px;" id="blog_post_info_block"><div style="margin: 0px; line-height: 1.8;" id="blog_post_info"><div style="margin: 0px; line-height: 1.8;" id="BlogPostCategory"></div></div></div> 
<img src ="http://www.blogjava.net/xcp/aggbug/383753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-07-23 12:00 <a href="http://www.blogjava.net/xcp/archive/2012/07/23/383753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>thinkpad t420i优化</title><link>http://www.blogjava.net/xcp/archive/2012/07/12/382954.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Thu, 12 Jul 2012 15:34:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/07/12/382954.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/382954.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/07/12/382954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/382954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/382954.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 转:http://nbbbs.zol.com.cn/40/32108_393722.html【傲雪年初巨献】相关教程(2012-2-17增加&#8220;关于压缩C盘至理想大小的最新发现&#8221;)   write_group_ad('topic_right_ad1','nbbbs_topic_right_ad1.inc',1);write_group_ad('topic_right_ad1'...&nbsp;&nbsp;<a href='http://www.blogjava.net/xcp/archive/2012/07/12/382954.html'>阅读全文</a><img src ="http://www.blogjava.net/xcp/aggbug/382954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-07-12 23:34 <a href="http://www.blogjava.net/xcp/archive/2012/07/12/382954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈谈如何通过网站域名访问weblogic中的应用</title><link>http://www.blogjava.net/xcp/archive/2012/03/21/372361.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Wed, 21 Mar 2012 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2012/03/21/372361.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/372361.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2012/03/21/372361.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/372361.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/372361.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 大家可能都有体会，在weblogic上部署了应用以后。访问的时候都要敲上一堆url。最典型的就是如下：http;//localhost:7001/webapp/&#8230;&#8230;等等，这个在我们的自己的开发环境上倒是可以勉强接受，可是在真正的网站发布的时候，到了用户那里，人家可不愿意在域名后面敲上难记的端口再加上一堆路径。而且，当weblogic上面部署了几个不同的应用的时候，人家该怎么通过不同的域名来访问我的站点呢？这些就是我们接下来要解决的问题。<br /><br />&nbsp;&nbsp;&nbsp; 让我们以潍坊电子政务项目中的一个解决办法作为例子吧。首先交代一下环境：数据库用的是是oracle。Web应用是部署在weblogic上面的，其中有两个web应用是要通过域名让外界访问的，一个是外网门户网站，web应用中名字简称为WWMH。一个是内网门户网站，web应用中的名字简称为NWMH。假设这两个应用是处于同一个目录中的，他们的文件夹就是他们web应用的名称，两个域名分别是<a href="http://www.weifang.gov.cn">www.weifang.gov.cn</a>和inner.weifang.gov.cn。<br /><br />&nbsp;&nbsp;&nbsp; 我们先看看域名访问的大体过程：<br />&nbsp;&nbsp;&nbsp; 比如外部某个机器输入域名访问<a href="http://www.weifang.gov.cn">www.weifang.gov.cn</a>，这个域名会被解析成为ip地址以及一些请求的主机信息，这样找到DNS服务器。再通过DNS所设的ip指向weblogic所在主机，这样就可以访问到外网的应用，具体详细的DNS原理请参见其他资料。<br />&nbsp;&nbsp;&nbsp; 外网几个关键配置如下：在这里的前提条件是你的web应用已经部署上了。首先要把mydomain-&gt;Servers-&gt;myservers中的list port端口改为80，默认的是7001。这样你通过域名访问的时候就不需要敲入端口，因为默认的就是80。然而仅仅这样还是不够的，此时如果你通过域名访问的时候，在域名后面还得跟上WWMH的文件夹路径，否则访问不到。我们现在所要设置的是context root的路径。把WWMH的文件夹去掉，取而代之的是 &#8221;/&#8221;，这样你默认的路径就是根目录了，做法是找到weblogic.xml文件，加上&lt;context－root&gt;/&lt;context－root&gt;，重起服务，这样通过域名就可以访问了。<br />&nbsp;&nbsp; &nbsp; 如果仅仅是部署了一个应用，通过这样的配置访问当然没有问题。可是，一个weblogic上会部署多个应用。需要通过不同的域名来访问，此时，该怎么办？比如说这里的内网，在外网已经配置好的情况下，又不忍心去改动以前配置好的成果。特别是前面的开发人员已经配置好的情况下。我们想到了weblogic自身的一个功能，那就是设置虚拟主机。它的思想就是，把内网的应用模拟成另外一个域名，通过这个域名来达到访问内网的目的。<br /><br />&nbsp;&nbsp;&nbsp; 具体的配置如下：在weblogic的console的左边导航栏，中选择mydomain －&gt;Services－&gt; VirtualHosts，然后在右面点击Configure a new Virtual Host...，在Configuration的General选项卡下面，填写：Name: NWMH 。Virtual Host Names里面填上： inner.weifang.gov.cn。然后点击&#8220;apply&#8221;，然后到Target and Deploy 选项卡，选中myserver，点击&#8220;apply&#8221;，这样名称为NWMH的虚拟主机就搭建成功了。<br />&nbsp;&nbsp;&nbsp;&nbsp;接下来在weblogic的console的左边导航栏，中选择mydomain －&gt;Deployments－&gt; Web Application Modeules，在deploy NWMH的应用时，在 Virtual Hosts下选上NWMH，点击 Deploy按钮。这样虚拟主机的配置算是完成了。但是，想要通过域名直接访问内网还是不行。后面还得跟上讨厌的路径，比如inner.weifang.gov/NWMH，然而默认的路径已经被外网给占用了，如果你在内网的配置文件里面加上&lt;context root&gt;/&lt;context root&gt;，部署肯定是不成功的，weblogic会告诉你，context root已经被占用。怎么办？其实不要慌。解决办法如下：在内网门户的配置文件上加上 &lt;VirtualHost Name="NWMH" Targets="myserver" DefaultWebApp="NWMH" VirtualHostNames="inner.weifang.gov.cn"/&gt;&nbsp;&nbsp; 。<br /><br />&nbsp;&nbsp;&nbsp; 重起服务，敲入域名inner.weifang.gov.cn。一切ok！问题解决。通过这种方法，weblogic上即使再部署几个应用都是可以解决的。<br /><br /><br /><br />以上内容仅仅是个人在做项目中的心得。并不保证其技术的完整性和绝对正确。<br /><br />本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/nighthawk/archive/2004/07/29/55575.aspx<img src ="http://www.blogjava.net/xcp/aggbug/372361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2012-03-21 14:02 <a href="http://www.blogjava.net/xcp/archive/2012/03/21/372361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FORALL语句、FORALL语句自动回滚</title><link>http://www.blogjava.net/xcp/archive/2011/12/31/367652.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Sat, 31 Dec 2011 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/31/367652.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/367652.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2011/12/31/367652.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/367652.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/367652.html</trackback:ping><description><![CDATA[<div><p align="center" style="text-align:center"><span style="color:fuchsia">FORALL</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;;color:fuchsia">语句</span></p>  <p>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句的一个关键性改进，它可大大简化代码，并且对于那些要在</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">程序中更新很多行数据的程序来说，它可显著提高其性能。</span></p>  <p>&nbsp;</p>  <p>1:</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">来增强</span>DML<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">的处理能力</span></p>  <p>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">为</span>Oracle8i<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中的</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">引入了两个新的数据操纵语言（</span>DML<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">）语句：</span>BULK COLLECT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">和</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">。这两个语句在</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">内部进行一种数组处理</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">；</span>BULK COLLECT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">提供对数据的高速检索，</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">可大大改进</span>INSERT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">、</span>UPDATE<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">和</span>DELETE<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">操作的性能。</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库使用这些语句大大减少了</span></p>  <p>&nbsp;</p>  <p>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">与</span>SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句执行引擎的环境切换次数，从而使其性能有了显著提高。</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">使用</span>BULK COLLECT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，你可以将多个行引入一个或多个集合中，而不是单独变量或记录中。下面这个</span><span>BULK COLLECT</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的实例是将标题中包含</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">有</span>"PL/SQL"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的所有书籍检索出来并置于记录的一个关联数组中，它们都位于通向该数据库的单一通道中。</span></p>  <p>DECLARE</p>  <p><span><span>&nbsp;&nbsp; </span>TYPE books_aat</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>IS TABLE OF book%ROWTYPE</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INDEX BY PLS_INTEGER;</span></p>  <p><span><span>&nbsp;&nbsp; </span>books books_aat;</span></p>  <p>BEGIN</p>  <p><span><span>&nbsp;&nbsp; </span>SELECT *</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>BULK COLLECT INTO book</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>FROM books</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp; </span>WHERE title LIKE '%PL/SQL%';</span></p>  <p><span><span>&nbsp;&nbsp; </span>...</span></p>  <p>END;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">类似地，</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">将数据从一个</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">集合传送给指定的使用集合的表。下面的代码实例给出一个过程，即接收书籍信息的一个嵌套表，并将该</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">集合（绑定数组）的全部内容插入该书籍表中。注意，这个例子还利用了</span>Oracle9i<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的增强功能，可以将一条记录直接插入到表中。</span></p>  <p>&nbsp;</p>  <p>BULK COLLECT<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">和</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">都非常有用，它们不仅提高了性能，而且还简化了为</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中的</span>SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">操作所编写的代码。下面的多行</span>FORALL INSERT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">相当</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">清楚地说明了为什么</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">被认为是</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库的最佳编程语言。</span></p>  <p>CREATE TYPE books_nt</p>  <p>IS TABLE OF book%ROWTYPE;</p>  <p>/</p>  <p>CREATE OR REPLACE PROCEDURE add_books (</p>  <p>&nbsp;</p>  <p>books_in IN books_nt)</p>  <p>IS</p>  <p>BEGIN</p>  <p>FORALL book_index</p>  <p><span><span>&nbsp;&nbsp;&nbsp; </span>IN books_in.FIRST .. books_in.LAST</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp; </span>INSERT INTO book</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>VALUES books_in(book_index);</span></p>  <p><span><span>&nbsp;&nbsp; </span>...</span></p>  <p>END;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">不过在</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">之前，以</span>FORAll<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">方式使用集合有一个重要的限制：该数据库从</span>IN<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">范围子句中的第一行到最后一行，依次读取集合的内容</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">。如果在该范围内遇到一个未定义的行，</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库将引发</span>ORA-22160<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">异常事件：</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span>ORA-22160: element at index [N] does not exist</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">对于</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的简单应用，这一规则不会引起任何麻烦。但是，如果想尽可能地充分利用</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，那么要求任意</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">驱动数组都要依次填充可</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">能会增加程序的复杂性并降低性能。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中，</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">现在在</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句中提供了两个新子句：</span>INDICES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">与</span>VALUES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，它们使你能够仔细选择驱动数组中该由扩展</span></p>  <p>&nbsp;</p>  <p>DML<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句来处理的行。</span></p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">当绑定数组为稀疏数组或者包含有间隙时，</span>INDICES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">会非常有用。该语句的语法结构为：</span></p>  <p>FORALL indx IN INDICES</p>  <p>&nbsp;</p>  <p>OF sparse_collection</p>  <p>INSERT INTO my_table</p>  <p>VALUES sparse_collection (indx);</p>  <p>&nbsp;</p>  <p>VALUES OF<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">用于一种不同的情况：绑定数组可以是稀疏数组，也可以不是，但我只想使用该数组中元素的一个子集。那么我就可以使用</span>VALUES</p>  <p>&nbsp;</p>  <p>OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">来指向我希望在</span>DML<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">操作中使用的值。该语句的语法结构为：</span></p>  <p>FORALL indx IN VALUES OF pointer_array</p>  <p>INSERT INTO my_table</p>  <p>VALUES binding_array (indx);</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">不用</span>FOR<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">循环而改用</span>FORALL</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">假定我需要编写一个程序，对合格员工（由</span>comp_analysis.is_eligible<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">函数确定）加薪，编写关于不符合加薪条件的员工的报告并写入</span></p>  <p>&nbsp;</p>  <p>employee_history<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">表。我在一个非常大的公司工作；我们的员工非常非常多。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">对于一位</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">开发人员来说，这并不是一项十分困难的工作。我甚至不需要使用</span><span>BULK COLLECT</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">或</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">就可以完成这项工作，如清单</span> 1<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">所示</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，我使用一个</span><span>CURSOR FOR</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">循环和单独的</span>INSERT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">及</span>UPDATE<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句。这样的代码简洁明了；不幸地是，我花了</span>10<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">分钟来运行此代码，我的</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">老式</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">方法</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">要运行</span>30<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">分钟或更长时间。</span></p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">清单</span> 1:</p>  <p><span>CREATE OR REPLACE PROCEDURE give_raises_in_department (</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>dept_in IN employee.department_id%TYPE</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>, newsal IN employee.salary%TYPE</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>)</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>IS</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CURSOR emp_cur</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>IS</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SELECT employee_id, salary, hire_date</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FROM employee</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WHERE department_id = dept_in;</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>BEGIN</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FOR emp_rec IN emp_cur</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LOOP</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>IF comp_analysis.is_eligible (emp_rec.employee_id)</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>THEN</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UPDATE employee</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET salary = newsal</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE employee_id = emp_rec.employee_id;</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ELSE</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; INSERT INTO employee_history</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (employee_id, salary</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , hire_date, activity</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUES (emp_rec.employee_id, emp_rec.salary</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , emp_rec.hire_date, 'RAISE DENIED'</span></p>  <p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;END IF;</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>END LOOP;</span></p>  <p><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>END give_raises_in_department;</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">好在我公司的数据库升级到了</span>Oracle9i<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，而且更幸运的是，在最近的</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">研讨会上（以及</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">技术网站提供的非常不错的演示中）我了解</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">到了批量处理方法。所以我决定使用集合与批量处理方法重新编写程序。写好的程序如清单</span> 2<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">所示。</span></p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">清单</span> 2:</p>  <p><span>1 CREATE OR REPLACE PROCEDURE give_raises_in_department (</span></p>  <p><span>2<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>dept_in IN employee.department_id%TYPE</span></p>  <p>3<span>&nbsp;&nbsp; , newsal IN employee.salary%TYPE</span></p>  <p>4 )</p>  <p>5 IS</p>  <p><span>6<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>TYPE employee_aat IS TABLE OF employee.employee_id%TYPE</span></p>  <p><span>7<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INDEX BY PLS_INTEGER;</span></p>  <p><span>8<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>TYPE salary_aat IS TABLE OF employee.salary%TYPE</span></p>  <p><span>9<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INDEX BY PLS_INTEGER;</span></p>  <p><span>10<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>TYPE hire_date_aat IS TABLE OF employee.hire_date%TYPE</span></p>  <p><span>11<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INDEX BY PLS_INTEGER;</span></p>  <p>12</p>  <p><span>13<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>employee_ids employee_aat;</span></p>  <p><span>14<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>salaries salary_aat;</span></p>  <p><span>15<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>hire_dates hire_date_aat;</span></p>  <p>16</p>  <p><span>17<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>approved_employee_ids employee_aat;</span></p>  <p>18</p>  <p><span>19<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>denied_employee_ids employee_aat;</span></p>  <p><span>20<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>denied_salaries salary_aat;</span></p>  <p><span>21<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>denied_hire_dates hire_date_aat;</span></p>  <p>22</p>  <p><span>23<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>PROCEDURE retrieve_employee_info</span></p>  <p><span>24<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>IS</span></p>  <p><span>25<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>BEGIN</span></p>  <p><span>26<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SELECT employee_id, salary, hire_date</span></p>  <p><span>27<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BULK COLLECT INTO employee_ids, salaries, hire_dates</span></p>  <p><span>28<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FROM employee</span></p>  <p><span>29<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;WHERE department_id = dept_in;</span></p>  <p><span>30<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>END;</span></p>  <p>31</p>  <p><span>32<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>PROCEDURE partition_by_eligibility</span></p>  <p><span>33<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>IS</span></p>  <p><span>34<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>BEGIN</span></p>  <p><span>35<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FOR indx IN employee_ids.FIRST .. employee_ids.LAST</span></p>  <p><span>36<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>LOOP</span></p>  <p><span>37<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>IF comp_analysis.is_eligible (employee_ids (indx))</span></p>  <p>38 <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;THEN</span></p>  <p>39<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; approved_employee_ids (indx) := employee_ids (indx);</span></p>  <p><span>40<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ELSE</span></p>  <p>41<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; denied_employee_ids (indx) := employee_ids (indx);</span></p>  <p>42<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; denied_salaries (indx) := salaries (indx);</span></p>  <p>43<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; denied_hire_dates (indx) := hire_dates (indx);</span></p>  <p><span>44<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>END IF;</span></p>  <p><span>45<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>END LOOP;</span></p>  <p><span>46<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>END;</span></p>  <p>47</p>  <p><span>48<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>PROCEDURE add_to_history</span></p>  <p><span>49<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>IS</span></p>  <p><span>50<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>BEGIN</span></p>  <p><span>51<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FORALL indx IN denied_employee_ids.FIRST .. denied_employee_ids.LAST</span></p>  <p><span>52<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INSERT INTO employee_history</span></p>  <p>53<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (employee_id</span></p>  <p>54<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , salary</span></p>  <p>55<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , hire_date, activity</span></p>  <p>56<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</span></p>  <p>57<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUES (denied_employee_ids (indx)</span></p>  <p>58<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , denied_salaries (indx)</span></p>  <p>59<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , denied_hire_dates (indx), 'RAISE DENIED'</span></p>  <p>60<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );</span></p>  <p><span>61<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>END;</span></p>  <p>62</p>  <p><span>63<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>PROCEDURE give_the_raise</span></p>  <p><span>64<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>IS</span></p>  <p><span>65<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>BEGIN</span></p>  <p><span>66<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FORALL indx IN approved_employee_ids.FIRST .. approved_employee_ids.LAST</span></p>  <p><span>67<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UPDATE employee</span></p>  <p>68<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET salary = newsal</span></p>  <p>69<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE employee_id = approved_employee_ids (indx);</span></p>  <p><span>70<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>END;</span></p>  <p>71 BEGIN</p>  <p><span>72<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>retrieve_employee_info;</span></p>  <p><span>73<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>partition_by_eligibility;</span></p>  <p><span>74<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>add_to_history;</span></p>  <p><span>75<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>give_the_raise;</span></p>  <p>76 END give_raises_in_department;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">扫一眼清单</span>1 <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">和清单</span>2 <span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">就会清楚地认识到：改用集合和批量处理方法将增加代码量和复杂性。但是，如果你需要大幅度提升性能，这还是值得</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的。下面，我们不看这些代码，我们来看一看当使用</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">时，用什么来处理</span><span>CURSOR FOR</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">循环内的条件逻辑。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">定义集合类型与集合</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在清单</span> 2<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中，声明段的第一部分（第</span>6<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>11<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行）定义了几种不同的集合类型，与我将从员工表检索出的列相对应。我更喜欢基于</span>employee%</p>  <p>&nbsp;</p>  <p>ROWTYPE<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">来声明一个集合类型，但是</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">还不支持对某些记录集合的操作，在这样的记录中，我将引用个别字段。所以，我还必须为员工</span>ID<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">、</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">薪金和雇用日期分别声明其各自的集合。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">接下来为每一列声明所需的集合（第</span>13<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>21<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行）。首先定义与所查询列相对应的集合（第</span>13<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>15<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行）：</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>employee_ids employee_aat;</p>  <p>salaries salary_aat;</p>  <p>hire_dates hire_date_aat;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">然后我需要一个新的集合，用于存放已被批准加薪的员工的</span>ID<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">（第</span>17<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行）：</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>approved_employee_ids employee_aat;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">最后，我再为每一列声明一个集合（第</span>19<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>21<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行），用于记录没有加薪资格的员工：</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>denied_employee_ids employee_aat;</p>  <p>denied_salaries salary_aat;</p>  <p>denied_hire_dates hire_date_aat;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">深入了解代码</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据结构确定后，我们现在跳过该程序的执行部分（第</span>72<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>75<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行），了解如何使用这些集合来加速进程。</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>retrieve_employee_info;</p>  <p>partition_by_eligibility;</p>  <p>add_to_history;</p>  <p>give_the_raise;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">我编写此程序使用了逐步细化法（也被称为</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">自顶向下设计</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">）。所以执行部分不是很长，也不难理解，只有四行，按名称对过程中的每一步进</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行了描述。首先检索员工信息（指定部门的所有员工）。然后进行划分，将要加薪和不予加薪的员工区分出来。完成之后，我就可以将那些不</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">予加薪的员工添加至员工历史表中，对其他员工进行加薪。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">以这种方式编写代码使最终结果的可读性大大增强。因而我可以深入到该程序中对我有意义的任何部分。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">有了已声明的集合，我现在就可以使用</span>BULK COLLECT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">来检索员工信息（第</span>23<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>30<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行）。这一部分有效地替代了</span>CURSOR FOR<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">循环。至此，数</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">据被加载到集合中。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">划分逻辑（第</span>32<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>46<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行）要求对刚刚填充的集合中的每一行进行检查，看其是否符合加薪条件。如果符合，我就将该员工</span>ID<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">从查询填充的</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">集合复制到符合条件的员工的集合。如果不符合，则复制该员工</span>ID<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">、薪金和雇用日期，因为这些都需要插入到</span>employee_history<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">表中。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">初始数据现在已被分为两个集合，可以将其分别用作两个不同的</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句（分别从第</span>51<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行和第</span>66<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行开始）的驱动器。我将不合格员工的集合</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中的数据批量插入到</span>employee_history<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">（</span>add_to_history<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">）表中，并通过</span>give_the_raise<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">过程，在</span>employee<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">表中批量更新合格员工的信息。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">最后再仔细地看一看</span>add_to_history<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">（第</span>48<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>61<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行），以此来结束对这个重新编写的程序的分析。</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句（第</span>51<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行）包含一个</span>IN<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">子句</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，它指定了要用于批量</span>INSERT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的行号范围。在对程序进行第二次重写的说明中，我将把用于定义范围的集合称为</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">驱动集合</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">。但在</span></p>  <p>&nbsp;</p>  <p>add_to_history<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的这一版本中，我简单地假定：</span> <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">使用在</span>denied_employee_ids<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中定义的所有行。在</span>INSERT<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">自身内部，关于不合格员工的三个集</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">合都会被用到；我将把这些集合称为</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据集合</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">。可以看到，驱动集合与数据集合无需匹配。在学习</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的新特性时，这是一个关</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">键点。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">结果，清单</span> 2 <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的行数大约是清单</span> 1<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行数的</span>2<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">倍，但是清单</span> 2 <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中的代码会在要求的时间内运行。在使用</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">之前，在这种情况下，</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">我只会对能够在这一时间内运行代码并开始下一个任务这一点感到高兴。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">不过，有了</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中最新版的</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，现在我就可以在性能、可读性和代码量方面作出更多的改进。</span></p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">将</span>VALUES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用于此过程</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中，可以指定</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句使用的驱动集合中的行的子集。可以使用以下两种方法之一来定义该子集：</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">将数据集合中的行号与驱动集合中的行号进行匹配。你需要使用</span>INDICES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">子句。</span></p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">将数据集合中的行号与驱动集合中所定义行中找到的值进行匹配。这需要使用</span>VALUES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">子句。</span></p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在对</span>give_raises_in_department<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">进行第二次和最后一次改写中我将使用</span>VALUES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">子句。清单</span> 3 <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">包含这个版本的全部代码。我将略过这一程序</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">中与前一版本相同的部分。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">从声明集合开始，请注意我不再另外定义集合来存放合格的和不合格的员工信息，而是在清单</span> 3 <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">（第</span>17<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>21<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行）中声明两个</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">引导</span>"<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">集合：</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">一个用于符合加薪要求的员工，另一个用于不符合加薪要求的员工。这两个集合的数据类型都是布尔型；不久将会看到，这些集合的数据类型</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">与</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句毫无关系。</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句只关心定义了哪些行。</span> <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在员工表中拥有</span>50 000<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行信息的</span>give_raises_in_department<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的三种执行方法的占</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用时间</span> <span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">执行方法</span> <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用时</span></p>  <p>CURSOR FOR<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">循环</span> 00:00:38.01</p>  <p>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">之前的批量处理</span> 00:00:06.09</p>  <p>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的批量处理</span> 00:00:02.06</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在员工表中拥有</span>100,000<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行数据的</span>give_raises_in_department<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的三种执行方法的占用时间</span> <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">执行方法</span> <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用时</span></p>  <p>CURSOR FOR<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">循环</span> 00:00:58.01</p>  <p>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">之前的批量处理</span> 00:00:12.00</p>  <p>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的批量处理</span> 00:00:05.05</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">表</span>1<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">：处理</span>50,000<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行和</span>100,000<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行数据的用时测试结果</span></p>  <p>&nbsp;</p>  <p>retrieve_employee_info<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">子程序与前面的相同，但是对数据进行划分的方式完全不同（第</span>32<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行至第</span>44<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行）。我没有将记录从一个集合复制到另</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">一个集合（这个操作相对较慢），而只是确定与员工</span>ID<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">集合中的行号相匹配的相应引导集合中的行（通过为其指定一个</span>TRUE<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">值）。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">现在可以在两个不同</span>FORALL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句（由第</span>49<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行和第</span>65<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行开始）中，将</span>approved_list<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">和</span>denied_list<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">集合用作驱动集合。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">为了插入到</span>employee_history<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">表中，我使用了如下语句：</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>FORALL indx IN VALUES OF denied_list</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">为了进行更新（给员工进行加薪），我使用这一格式：</span></p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>FORALL indx IN VALUES OF approved_list</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在这两个</span>DML<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句中，数据集合是在</span>BULK COLLECT <span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">检索步骤中填充的最初的集合；没有进行过复制。利用</span>VALUES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库在这些数据</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">集合的行中进行筛选，仅使用行号与驱动集合中行号相匹配的行</span></p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">利用本程序中的</span><span>VALUES OF</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，可以避免复制对全部记录进行复制，而是用行号的一个简单列表来替换它们。对于大型数组，进行这些复制的开销</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">是非常可观的。为了测试</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">的优越性，我装入</span>employee<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">表并对</span>50,000<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行和</span>100,000<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行的数据运行测试。为了模拟更多的现实情况</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">，我将</span>Oracle<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>10g<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">之前的批量处理的执行方法作了修改以进行集合内容的多次复制。然后我使用</span>SQL*Plus SET TIMING ON<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">来显示运行各个</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">不同的执行方法所用的时间。表</span><span> 1 </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">给出了结果。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">从这些时间测定得到的结论非常清楚：由单个</span>DML<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句变为批量处理将大幅缩短耗用时间，数据为</span>50,000<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">行时的用时由</span>38<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">秒减为</span>6<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">秒，数据为</span></p>  <p>&nbsp;</p>  <p>100,000<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">行时的用时由</span>58<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">秒减为</span>12<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">秒。而且，通过使用</span>VALUES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">来避免复制数据，我可以将用时缩短一半左右。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">即使没有性能上的改进，</span><span>VALUES OF</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">及其同类子句</span><span>--INDICES OF</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">也提高了</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语言的灵活性，使开发人员能够更轻松地编写出更直观和更容易</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">维护的代码。</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在产品寿命这一点上，</span>PL/SQL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">是一种成熟且功能强大的语言。因而，其很多新特性都是逐渐增加和改进而成的。不过，这些新特性还是使应用</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">程序的性能和开发人员的开发效率有了重大改变。</span>VALUES OF<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">就是这种特性的一个很好的例子。</span></p>  <p>&nbsp;</p></div><img src ="http://www.blogjava.net/xcp/aggbug/367652.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-31 15:46 <a href="http://www.blogjava.net/xcp/archive/2011/12/31/367652.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Bulk Collect提高Oracle查询效率</title><link>http://www.blogjava.net/xcp/archive/2011/12/31/367650.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Sat, 31 Dec 2011 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/31/367650.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/367650.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2011/12/31/367650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/367650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/367650.html</trackback:ping><description><![CDATA[<div><div>使用Bulk Collect提高Oracle查询效率</div><div>Oracle8i中首次引入了Bulk Collect特性，该特性可以让我们在PL/SQL中能使用批查询，批查询在某些情况下能显著提高查询效率。现在，我们对该特性进行一些简单的测试和分析。</div><div></div><div>一、首先，我们创建一个表，并插入100000条记录</div><div>在SQL/Plus中执行下列脚本：</div><div></div><div>drop table empl_tbl</div><div>/</div><div>create table empl_tbl(last_name varchar2(20),</div><div>first_name varchar2(10),</div><div>salary number(10))</div><div>/</div><div>begin</div><div>for i in 30000..1029999 loop</div><div>insert into empl_tbl(last_name,first_name,salary) values('carl'||(i-3000),'wu'||(1003000-i),i);</div><div>end loop;</div><div>end;</div><div>/</div><div>commit</div><div>/</div><div>select count(*) from empl_tbl;</div><div>/<br /></div><div></div><div></div><div></div><div></div><div></div><div></div><div>二、使用三种方法计算表中某一字段含有多少个不重复值</div><div>2.1 使用常规的Distinct来实现</div><div>SQL&gt; select count(<strong>distinct</strong> last_name) from empl_tbl;</div><div>Distinct Last Name</div><div>------------------</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1000000</div><div>Executed in 1.531 seconds</div><div>我们可以看到，常规方法需要1.531 秒查出该表中有1000000个不重复的Last_name值。</div><div></div><div>2.2 使用游标来实现</div><div>我们执行下面语句来统计Last_name字段的不重复值个数：</div><div>CREATE OR REPLACE PROCEDURE tttt IS</div><div>&nbsp; all_rows number(10);</div><div><strong>&nbsp; temp_last_name empl_tbl.last_name%type;</strong></div><div>begin</div><div>&nbsp; all_rows:=0;</div><div>&nbsp; temp_last_name:=' ';</div><div>&nbsp; for <strong>cur</strong> in (select last_name from empl_tbl order by last_name) loop</div><div></div><div>&nbsp; &nbsp; &nbsp; if cur.last_name!=temp_last_name then</div><div>&nbsp; &nbsp; &nbsp; &nbsp;all_rows:=all_rows+1;</div><div>&nbsp; &nbsp; &nbsp; end if;</div><div>&nbsp; &nbsp; &nbsp; temp_last_name:=cur.last_name;</div><div></div><div>&nbsp; end loop;</div><div>&nbsp; dbms_output.put_line('all_rows are '||all_rows);</div><div>end;</div><div>请注意上面代码中的黑体部分使用了一个For Loop游标，为了提高程序可读性，我们没有显示定义游标变量。</div><div>执行结果：</div><div>all_rows are 1000000</div><div>PL/SQL procedure successfully completed</div><div>Executed in 10.39 seconds</div><div>游标需要10.396秒才能查出该表中有1000000个不重复的Last_name值，所耗时间是Distinct查询的10倍多。</div><div></div><div></div><div>2.3 使用Bulk Collect批查询来实现</div><div>示例代码如下：</div><div>declare</div><div>&nbsp; all_rows number(10);</div><div>&nbsp; --首先，定义一个Index-by表数据类型</div><div>&nbsp;<strong> type last_name_tab is table of empl_tbl.last_name%type index by binary_integer;</strong></div><div><strong>&nbsp; last_name_arr last_name_tab;</strong></div><div>&nbsp; --定义一个Index-by表集合变量</div><div><strong>&nbsp; temp_last_name empl_tbl.last_name%type;</strong></div><div>&nbsp;</div><div>begin</div><div>&nbsp; all_rows:=0;</div><div>&nbsp; temp_last_name:=' ';</div><div>&nbsp; --使用Bulk Collect批查询来充填集合变量</div><div>&nbsp; select last_name bulk collect into last_name_arr from empl_tbl;</div><div>&nbsp;</div><div>&nbsp; f<strong>or i in 1..last_name_arr.count loop</strong></div><div>&nbsp; &nbsp; &nbsp; if temp_last_name!=last_name_arr(i) then</div><div>&nbsp; &nbsp; &nbsp; &nbsp;all_rows:=all_rows+1;</div><div>&nbsp; &nbsp; &nbsp; end if;</div><div>&nbsp; &nbsp; &nbsp; temp_last_name:=last_name_arr(i);</div><div>&nbsp; end loop;</div><div>&nbsp;dbms_output.put_line('all_rows are '||all_rows);</div><div>end;</div><div>请注意上面代码中，我们首先定义了一个Index-by表数据类型last_name_tab，然后定义了一个该集合数据类型的变量last_name_arr，最后我们使用Bulk Collect批查询来充填last_name_arr，请注意它</div><div></div><div>的使用语法。</div><div>执行结果：</div><div>all_rows are 1000000</div><div>PL/SQL procedure successfully completed</div><div>Executed in 2.343 seconds</div><div>从上面执行结果，我们可以看到，Bulk Collect批查询只需要2.343 秒就能查出该表中有1000000个不重复的Last_name值，所耗时间只有游标查询的1/2.5。<br /><div><div><br /><br />三． 测试结果分析</div><div>为什么会出现上面的结果呢？我们可以使用Oracle的SQL_Trace来分析一下结果。在SQL命令行中，使用alter session set sql_trace=true语句打开Oracle的Trace，然后在命令行中执行上面三种查询并使用TKPROF工具生成Trace报告。</div></div><div>3.1 常规Distinct查询结果分析</div><div>3.2 游标查询效率分析<br /><div>3.3 Bulk Collect的查询效率分析</div></div><br /><div><div>四． 结论</div><div>通过上面的测试和分析，我们可以看到Bulk Collect批查询在某种程度上可以提高查询效率，它<strong>首先将所需数据读入内存，然后再统计分析</strong>，这样就可以提高查询效率。但是，如果Oracle数据库的内存较小，Shared Pool Size不足以保存Bulk Collect批查询结果，那么该方法需要将Bulk Collect的集合结果保存在磁盘上，在这种情况下，Bulk Collect方法的效率反而不如其他两种方法，有兴趣的读者可以进一步测试。<br /></div><div>另外，除了Bulk Collect批查询外，我们还可以使用<strong>FORALL</strong>语句来实现批插入、删除和更新，这在大批量数据操作时可以显著提高执行效率。</div></div></div></div><img src ="http://www.blogjava.net/xcp/aggbug/367650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-31 15:03 <a href="http://www.blogjava.net/xcp/archive/2011/12/31/367650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle_常用系统表</title><link>http://www.blogjava.net/xcp/archive/2011/12/31/367624.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Sat, 31 Dec 2011 03:04:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/31/367624.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/367624.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2011/12/31/367624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/367624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/367624.html</trackback:ping><description><![CDATA[<div><p>dba_<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">开头</span>.....</p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库用户信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_segments </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">表段信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_extents&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据区信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_objects&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库对象信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_tablespaces&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库表空间信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_data_files&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据文件设置信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_temp_files&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">临时数据文件信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_rollback_segs&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">回滚段信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_ts_quotas&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户表空间配额信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_free_space </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库空闲空间信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_profiles&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库用户资源限制信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_sys_privs&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的系统权限信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_tab_privs </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户具有的对象权限信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_col_privs </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户具有的列对象权限信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_role_privs </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户具有的角色信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_audit_trail </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">审计跟踪记录信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_stmt_audit_opts </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">审计设置信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_audit_object&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">对象审计结果信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_audit_session </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">会话审计结果信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dba_indexes </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户模式的索引信息</span></p>  <p>&nbsp;</p>  <p>user_<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">开头</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_objects&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户对象信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_source&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库用户的所有资源对象信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_segments&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的表段信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_tables&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的表对象信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_tab_columns&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的表列信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_constraints&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的对象约束信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_sys_privs&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">当前用户的系统权限信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_tab_privs&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">当前用户的对象权限信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_col_privs&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">当前用户的表列权限信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_role_privs&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">当前用户的角色权限信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_indexes&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的索引信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_ind_columns </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的索引对应的表列信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_cons_columns&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的约束对应的表列信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_clusters&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的所有簇信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_clu_columns </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">用户的簇所包含的内容信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>user_cluster_hash_expressions&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">散列簇的信息</span></p>  <p>&nbsp;</p>  <p>v$<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">开头</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$database&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$datafile&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据文件信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$controlfile </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">控制文件信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$logfile&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">重做日志信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$instance&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库实例信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$log&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">日志组信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$loghist </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">日志历史信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$sga&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库</span>SGA<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$parameter </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">初始化参数信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$process&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库服务器进程信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$bgprocess&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库后台进程信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$controlfile_record_section&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">控制文件记载的各部分信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$thread&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">线程信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$datafile_header&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据文件头所记载的信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$archived_log </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">归档日志信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$archive_dest &nbsp;&nbsp;</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">归档日志的设置信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$logmnr_contents&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">归档日志分析的</span>DML DDL<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">结果信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$logmnr_dictionary&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">日志分析的字典文件信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$logmnr_logs&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">日志分析的日志列表信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$tablespace&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">表空间信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$tempfile&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">临时文件信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$filestat&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据文件的</span>I/O<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">统计信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$undostat&nbsp;&nbsp; Undo</span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$rollname&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">在线回滚段信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$session&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">会话信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$transaction </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">事务信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$rollstat&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">回滚段统计信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$pwfile_users&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">特权用户信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$sqlarea&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">当前查询过的</span>sql<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">语句访问过的资源及相关的信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$sql&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">与</span>v$sqlarea<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">基本相同的相关信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>v$sysstat&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库系统状态信息</span></p>  <p>&nbsp;</p>  <p>all_<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">开头</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>all_users&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库所有用户的信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>all_objects&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">数据库所有的对象的信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>all_def_audit_opts&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">所有默认的审计设置信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>all_tables&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">所有的表对象信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>all_indexes </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">所有的数据库对象索引的信息</span></p>  <p>&nbsp;</p>  <p>session_<span style="font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">开头</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>session_roles&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">会话的角色信息</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>session_privs&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">会话的权限信息</span></p>  <p>&nbsp;</p>  <p>index_<span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">开头</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>index_stats&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">索引的设置和存储信息</span></p>  <p>&nbsp;</p>  <p><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">伪表</span></p>  <p>&nbsp;</p>  <p><span><span>&nbsp;&nbsp; </span>dual&nbsp;&nbsp; </span><span style="font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">系统伪列表信息</span></p></div><img src ="http://www.blogjava.net/xcp/aggbug/367624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-31 11:04 <a href="http://www.blogjava.net/xcp/archive/2011/12/31/367624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle 查看用户 用户权限 用户表空间 用户默认表空间[转]</title><link>http://www.blogjava.net/xcp/archive/2011/12/31/367623.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Sat, 31 Dec 2011 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/31/367623.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/367623.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2011/12/31/367623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/367623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/367623.html</trackback:ping><description><![CDATA[<div><div>1、查看所有用户<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;dba_users;<span style="color: #808080; ">//</span>dba<br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;all_users;<span style="color: #808080; ">//all</span><br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_users;<span style="color: #808080; ">//</span>当前</div><div>2、查看当前用户连接：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;v$Session;</div><div>3、查看当前用户权限：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;session_privs;</div>4、查看所有用户系统权限<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;dba_sys_privs;<br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_sys_privs;</div>5、查看所有用户对象权限<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;dab_tab_privs;<br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;all_tab_privs;<br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_tab_privs;</div>6、查看所有角色<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;dba_roles;<br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;dba_role_privs;<br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_role_privs;</div>7、查看所有表空间、临时表空间等信息<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;tablespace_name,<span style="color: #FF00FF; ">file_name</span>,bytes&nbsp;file_size,autoextensible&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;dba_data_files;<br /><span style="color: #0000FF; ">select</span>&nbsp;tablespace_name,<span style="color: #FF00FF; ">file_name</span>,bytes&nbsp;file_size,autoextensible&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;dba_temp_files;</div>8、查看用户表空间使用情况：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<br />&nbsp;&nbsp;a.<span style="color: #FF00FF; ">file_id</span>&nbsp;"FileNo",a.tablespace_name&nbsp;"Tablespace_name",<br />&nbsp;&nbsp;a.bytes&nbsp;"Bytes",a.bytes<span style="color: #808080; ">-</span><span style="color: #FF00FF; ">sum</span>(nvl(b.bytes,<span style="color: #800000; font-weight: bold; ">0</span>))&nbsp;"Used",&nbsp;<span style="color: #FF00FF; ">sum</span>(nvl(b.bytes,<span style="color: #800000; font-weight: bold; ">0</span>))&nbsp;"Free",<span style="color: #FF00FF; ">sum</span>(nvl(b.bytes,<span style="color: #800000; font-weight: bold; ">0</span>))<span style="color: #808080; ">/</span>a.bytes<span style="color: #808080; ">*</span><span style="color: #800000; font-weight: bold; ">100</span>&nbsp;"<span style="color: #808080; ">%</span>free"&nbsp;<br /><span style="color: #0000FF; ">from</span>&nbsp;dba_data_files&nbsp;a,dba_free_space&nbsp;b&nbsp;<br /><span style="color: #0000FF; ">where</span>&nbsp;a.<span style="color: #FF00FF; ">file_id</span><span style="color: #808080; ">=</span>b.<span style="color: #FF00FF; ">file_id</span>(<span style="color: #808080; ">+</span>)&nbsp;<br /><span style="color: #0000FF; ">group</span>&nbsp;<span style="color: #0000FF; ">by</span>&nbsp;a.tablespace_name&nbsp;,&nbsp;a.<span style="color: #FF00FF; ">file_id</span>,a.bytes&nbsp;<br /><span style="color: #0000FF; ">order</span>&nbsp;<span style="color: #0000FF; ">by</span>&nbsp;a.tablespace_name;&nbsp;</div>9、查看用户所有对象<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;table_name,num_rows&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_tables;<br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;all_tables;</div>10、询所有函数和存储过程<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;dba_source;<br /><span style="color: #0000FF; ">select</span>&nbsp;<span style="color: #808080; ">*</span>&nbsp;<span style="color: #0000FF; ">from</span>&nbsp;user_source;</div></div></div></div><div></div></div><img src ="http://www.blogjava.net/xcp/aggbug/367623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-31 10:42 <a href="http://www.blogjava.net/xcp/archive/2011/12/31/367623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle数据恢复</title><link>http://www.blogjava.net/xcp/archive/2011/12/23/367052.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Fri, 23 Dec 2011 02:33:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/23/367052.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/367052.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2011/12/23/367052.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/367052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/367052.html</trackback:ping><description><![CDATA[&nbsp;<strong style="font-size: 18pt">1. 
<div style="display: inline-block"></div></strong><strong style="font-size: 18pt">表查询闪回</strong><br />create table xcp as (select * from b_za_bzdzkxx);<br />select * from xcp;<br />select count(1) from xcp;--22001<br />select count(1) from xcp t where t.dzbh like '510521%';--7011<br />delete from xcp t where t.dzbh like '510521%';<br />select count(1) from xcp;--14990<br /><strong><span style="background-color: yellow">－－查找指定时间点前</span><span style="background-color: yellow">的数据</span><br /></strong><span style="background-color: yellow">select count(1) from xcp </span><span style="color: red; background-color: yellow"><strong>as of timestamp</strong> </span><span style="background-color: yellow">to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');--</span><span style="background-color: yellow">22001<br /></span><br />select * from xcp for update;－－添加一条记录<br />select count(1) from xcp;--14991<br /><strong><span style="background-color: yellow"><br />--恢复指定时间点的前delete数据（将删除恢复时间点后面的数据）</span><br /></strong><span style="background-color: yellow">alter table xcp enable row movement;--启动的行移动功能</span><br /><span style="color: red; background-color: yellow">flashback </span><span style="background-color: yellow">table xcp </span><span style="color: red; background-color: yellow">to timestamp </span><span style="background-color: yellow">to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');</span><br />select count(1) from xcp;--22001<br /><span style="background-color: yellow"><strong><span style="background-color: yellow"><strong><br />--恢复指定时间点的前delete数据，并保留恢复时间点后面的数据</strong></span></strong></span><br /><span style="background-color: yellow">create table xcp2 as (select * from xcp t where t.createdtime&gt;to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss</span>'));<br />select * from xcp2;--临时表<br /><span style="background-color: yellow">alter table xcp enable row movement;<strong>--启动的行移动功能</strong></span><br /><span style="color: red; background-color: yellow">flashback </span><span style="background-color: yellow">table xcp </span><span style="color: red; background-color: yellow">to timestamp </span><span style="background-color: yellow">to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');</span><br />select count(1) from xcp;--22001<br /><font style="background-color: #ffff00">insert into xcp select * from xcp2 --将临时表的数据再插入到源表</font><br />select count(1) from xcp;--22002<br /><strong style="font-size: 18pt"><br /></strong><strong style="font-size: 18pt"><br />2.删除</strong><strong style="font-size: 18pt">闪回[10g+]<br /></strong>&nbsp; &nbsp; 删除闪回为删除oracle 10G提供了一个数据库安全机制，当用户删除一个表时，oracle 10G会将该表放到回收站中，回收站中的对象一直会保留，直到用户决定永久删除它们或出现表空间的空间不足时才会被删除。回收站是一个虚拟容器，用于存储所有被删除的对象。数据字典user_tables中的列dropped表示被删除的表，查询方法如下：<br /><span style="background-color: yellow">select table_name,dropped from user_tables;</span><br />--设置数据库是否启用回收站<br /><span style="background-color: yellow">alert session set recyclebin = off;</span><br />--查询回收站对象<br />
<div style="display: inline-block">
<div></div></div>
<div>
<div><span style="background-color: yellow">select * from recyclebin;</span></div>
<div><span style="background-color: yellow">select * from user_recyclebin;</span></div>
<div><span style="background-color: yellow">select * from dba_recyclebin;<br /><br /></span></div></div><br />drop table xcp;<br />select count(1) from xcp;--0<br /><strong><span style="background-color: yellow">--恢复drop的表</span><br /></strong><span style="color: red; background-color: yellow">flashback </span><span style="background-color: yellow">table xcp </span><span style="color: red; background-color: yellow">to before drop;</span><br />select count(1) from xcp;--22001 <br /><br />如果不知道原表名，可以直接使用回收站中的名称进行闪回..<br />
<div><span style="background-color: yellow">flashback table "BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop;</span></div>在回收的同时可以修改表名<br />
<div><span style="background-color: yellow">flashback table "</span> 
<div style="display: inline-block"></div><span style="background-color: yellow">BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0</span><span style="background-color: yellow">" to before drop rename to xcp1;<br /></span></div><br />--真正删除一个表，而不进入回收站，可以在删除表时增加purge选项<span style="background-color: yellow"><br /></span><span style="background-color: yellow">drop table xcp1 purge;</span><br />--也可以从回收站永久性删除表<br /><span style="background-color: yellow">purge table xcp1;</span><br />--删除当前用户回收站<br /><span style="background-color: yellow">purge recyclebin</span><br />--删除全体用户在回收站的资源<br /><span style="background-color: yellow">purge dba_resyclebin<br /></span><strong style="font-size: 18pt"><br /><br /><br />3.数据库闪口 
<div style="display: inline-block"></div></strong><strong style="font-size: 18pt">[10g+]</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;使用数据库闪回功能，可以使数据库回到过去某一状态，语法如下：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql: <span style="background-color: yellow">alter database flashback on;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql: <span style="background-color: yellow">flashback database to scn 46963;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sql: <span style="background-color: yellow">flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-MM-dd hh24:mi:ss'); <br /><br /><br /><br />注：表结构修改后不能直接恢复<br /><a href="http://blog.csdn.net/colin_liu2009/article/details/6906548">http://blog.csdn.net/colin_liu2009/article/details/6906548</a><br /><br /><a href="http://www.xifenfei.com/2012/06/%E5%88%A9%E7%94%A8flashback-database%E5%AE%9E%E7%8E%B0%E9%83%A8%E5%88%86%E5%AF%B9%E8%B1%A1%E5%9B%9E%E6%BB%9A.html">http://www.xifenfei.com/2012/06/%E5%88%A9%E7%94%A8flashback-database%E5%AE%9E%E7%8E%B0%E9%83%A8%E5%88%86%E5%AF%B9%E8%B1%A1%E5%9B%9E%E6%BB%9A.html</a><br /></span><img src ="http://www.blogjava.net/xcp/aggbug/367052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-23 10:33 <a href="http://www.blogjava.net/xcp/archive/2011/12/23/367052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何读取本地磁盘驱动器?</title><link>http://www.blogjava.net/xcp/archive/2011/12/16/366548.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Fri, 16 Dec 2011 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/16/366548.html</guid><description><![CDATA[<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;fso;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drvs;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drv;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">var</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;s;&nbsp;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fso&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">new</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;ActiveXObject(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">Scripting.FileSystemObject</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drvs&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">new</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;Enumerator(fso.Drives);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">for</span><span style="color: #000000; background-color: #f5f5f5">(;</span><span style="color: #000000; background-color: #f5f5f5">!</span><span style="color: #000000; background-color: #f5f5f5">drvs.atEnd();drvs.moveNext()){&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drv&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drvs.item();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;s&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drv.DriveLetter;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;(drv.DriveType&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">==</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">3</span><span style="color: #000000; background-color: #f5f5f5">)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drv.ShareName;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">else</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;(drv.IsReady)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drv.VolumeName&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;totalSize:&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drv.totalSize&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;freeSpace:&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drv.freeSpace&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;availableSpace:&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;drv.availableSpace;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">else</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">[Drive&nbsp;&nbsp;&nbsp;not&nbsp;&nbsp;&nbsp;ready]&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">\n&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(s);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p><img src ="http://www.blogjava.net/xcp/aggbug/366548.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-16 17:29 <a href="http://www.blogjava.net/xcp/archive/2011/12/16/366548.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用 且 生僻的html标签(to me)</title><link>http://www.blogjava.net/xcp/archive/2011/12/15/366463.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Thu, 15 Dec 2011 09:59:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/15/366463.html</guid><description><![CDATA[<div>
<div>&lt;noscript&gt;：不支持脚本的显示noscript里面的内容</div>
<div>&lt;noframes&gt;：不支持框架的显示noframes里面的内容<br /></div>
<div>&lt;nobr&gt;: 不换行显示内容<br />&lt;map&gt;定义一个图片，、&lt;area&gt;在图片上定点显示</div>
<div>&lt;fieldset&gt;可将表单内的元素分组,配合legend标签使用[使用title]</div>
<div>&lt;optgroup&gt;:标签定义选项组[下拉列表里面分组显示]</div>
<div>&lt;sub&gt;上标 &nbsp; &lt;sup&gt;下标 &nbsp;&lt;del&gt;文字上加删除线 &nbsp;&lt;ins&gt;文字下加划线</div>
<div>&lt;ol&gt;有序列表,前面显示下标标识 &nbsp;&lt;ul&gt;无序列表,前面显示圆点标识 &nbsp;&lt;li&gt;子项</div>
<div>&lt;dl&gt;内容块 &nbsp;&lt;dd&gt;内容标题 &lt;dt&gt;内容</div>
<div>&lt;address&gt;显示地址信息</div></div><img src ="http://www.blogjava.net/xcp/aggbug/366463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-15 17:59 <a href="http://www.blogjava.net/xcp/archive/2011/12/15/366463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单东东---关闭占用指定端口的进程</title><link>http://www.blogjava.net/xcp/archive/2011/12/13/366257.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Tue, 13 Dec 2011 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/13/366257.html</guid><description><![CDATA[<div><font style="background-color: #cce8cf">今天.....<br /><br />
<p>8080端口被其他的应用占用<br />第一步，命令提示符号，执行命令：netstat -ano </p>
<p>可见，占用8080端口的进程的PID是1476 <br /><br />第二步<br />&nbsp; 方法一:<br />&nbsp;&nbsp;&nbsp; 命令提示符号，执行命令：tasklist&nbsp;<br />&nbsp;&nbsp;&nbsp; xxx.exe 1476 Console 0 6,464 K <br />&nbsp;&nbsp;&nbsp; 可见，该占用8080端口的进程是xxx.exe </p>
<p>&nbsp;&nbsp;&nbsp; 通过任务管理器，终止进程xxx.exe </p>&nbsp;方法二:<br />&nbsp;&nbsp;&nbsp; 通过任务管理器,查看菜单,选择列,把PID显示出来<br />&nbsp;&nbsp;&nbsp; 查到对应的PID:1476,终止进程xxx.exe </font></div><img src ="http://www.blogjava.net/xcp/aggbug/366257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-13 16:50 <a href="http://www.blogjava.net/xcp/archive/2011/12/13/366257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>11个让你代码整洁的原则</title><link>http://www.blogjava.net/xcp/archive/2011/12/09/366001.html</link><dc:creator>xcp</dc:creator><author>xcp</author><pubDate>Fri, 09 Dec 2011 14:13:00 GMT</pubDate><guid>http://www.blogjava.net/xcp/archive/2011/12/09/366001.html</guid><wfw:comment>http://www.blogjava.net/xcp/comments/366001.html</wfw:comment><comments>http://www.blogjava.net/xcp/archive/2011/12/09/366001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xcp/comments/commentRss/366001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xcp/services/trackbacks/366001.html</trackback:ping><description><![CDATA[<div><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">写Web页面就像我们建设房子一样，地基牢固，房子才不会倒。同样的，我们制作Web页面也一样，一个良好的HTML结构是制作一个美丽的网站的开始，同样的，良好的CSS只存在同样良好的HTML中，所以一个干净的，语义的HTML的优点很多，那么平时制作中，我们做到了这一点吗？我们一起来看一张图片：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principles-html.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">上图展示了两段代码，我想大家都只会喜欢第一种，我们先不说其语义，至少他的结构让我们看上去清爽，而第二种呢？一看就是糟糕的代码的代码，让人讨厌的代码。那么要怎么样才能写出一个好的代码，整洁的代码呢？下面我们就从以下十二个方面一起来学习，只要大家以后在写代码的时候能坚持下面的十二个原则，保准 你的代码质量能上去，而且你写的代码会人见人爱。</p><h4>一、DOCTYPE的声明</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">如果我们想做好一件事情，首先要知道我们有哪些权利去做，就如&#8220;DOCTYPE&#8221;的声明，我们没有必要去讨论是否使用HTML4.01或者XHTML1.0或者说现在的HTML5都提供了严格版本或者过渡版本，这些都能很好的支持我们写的代码：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principles-cleancode-1.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">由于我们现在的布局不需要table布局也能做出很好的布局，那么我们就可以考虑不使用过渡型而使用严格型的&#8220;DOCTYPE&#8221;，为了向后兼容，我建议使用HTML5的声明模式：</p><pre style="color: #222222; font-size: 12px; background-color: #ffffff; ">&lt;!DOCTYPE HTML&gt; 		&lt;html lang="en-US"&gt; 	</pre><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">如果想了解更多这方面的知识，可以点击：</p><ol style="margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-left: 25px; font-size: 12px; background-color: #ffffff; color: #222222; font-family: Arial, Helvetica, 宋体; "><li><a href="http://www.w3.org/QA/2002/04/valid-dtd-list.html" target="_blank" style="text-decoration: none; color: #5e9040; ">W3C: Recommended DTDs to use in your Web document</a></li><li><a href="http://www.alistapart.com/stories/doctype/" target="_blank" style="text-decoration: none; color: #5e9040; ">Fix Your Site With the Right DOCTYPE!</a></li><li><a href="http://www.456bereastreet.com/archive/200609/no_more_transitional_doctypes_please/" target="_blank" style="text-decoration: none; color: #5e9040; ">No more Transitional DOCTYPEs, please</a></li></ol><h4>二、字符集和编码字符</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">在每个页面的开始中，我们都在&lt;head&gt;中设置了字符集，我们这里都是使用&#8220;UTF-8&#8221;</p><pre style="color: #222222; font-size: 12px; background-color: #ffffff; ">&lt;meta charset="UTF-8" /&gt; 	</pre><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">而且我们在平时写页面中时，时常会碰到"&amp;"这样的符号，那么我们不应该直接在页面这样写&#8220;&amp;&#8221;:</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principles-cleancode-2.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">我们应该在代码中使用字符编码来实现，比如说&#8220;&amp;&#8221;我们在代码中应该使用&#8220;&amp;amp;&#8221;来代替他。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">如果想了解更多这方面的知识，可以点击：</p><ol style="margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-left: 25px; font-size: 12px; background-color: #ffffff; color: #222222; font-family: Arial, Helvetica, 宋体; "><li><a href="http://en.wikipedia.org/wiki/UTF-8" target="_blank" style="text-decoration: none; color: #5e9040; ">Wikipedia: UTF-8</a></li><li><a href="http://www.cs.tut.fi/~jkorpela/chars.html" target="_blank" style="text-decoration: none; color: #5e9040; ">A tutorial on character code issues</a></li><li><a href="http://www.ascii-code.com/" target="_blank" style="text-decoration: none; color: #5e9040; ">The Extended ASCII table</a></li></ol><h4>三、正确的代码缩进</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">在页面编辑中，代码的缩进有没有正确，他不会影响你网站的任何功能，但要是你没有一个规范的缩进原则，让读你代码的人是非常的生气，所以说正确的代码缩进可以增强你的代码可读性。标准程序的缩进应该是一个制表符（或几个空格），形像一点的我们来看下文章开头那张图，或者一起来看下面展示的这张图，你看后就知道以后自己的代码要怎么样书写才让人看了爽：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principle-cleancode-3.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">不用说，大家都喜欢下面的那种代码吧。这只是一个人的习惯问题，不过建议从开始做好，利人利已。有关于这方面的介绍，大家还可以参考：<a href="http://www.w3.org/People/Raggett/tidy/" target="_blank" style="text-decoration: none; color: #5e9040; ">Clean up your Web pages with HTML TIDY</a></p><h4>四、外链你的CSS样式和Javascript脚本</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">页面中写入CSS样式有很多种方法，有些直接将样式放入页面的&#8220;&lt;head&gt;&#8221;中，这将是一个很不好的习惯，因为这样不仅会搞乱我们的标记，而且这些样式只适合这一个HTML页面。所以我们需要将CSS单独提出，保存在外部，这样后面的页面也可以链接到这些样式，如果你页面需要修改，我们也只需要修改样式文件就可以。正如下图所示：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principle-cleancode-4.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">上面我们所说的只是样式，其实javascript脚本也和CSS样式是同一样的道理。图文并说，我最终想表达的意思是&#8220;<strong style="color: red; ">在制作web页面中，尽量将你的CSS样式和javascript脚本单独放在一个文件中，然后通过链接的方式引用这些文件，这样做的最大好处是，方便你的样式和脚本的管理与修改。</strong>&#8221;</p><h4>五、正确的标签嵌套</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">我们在写HTML时总是需要标签的层级嵌套来帮我们完成HTML的书写，但这些HTML的嵌套是有一定的规则的，如果要细说的话，我们可能要用几个章节来描述，那么我今天这里要说的是，我们在写HTML时不应该犯以下这样的超级错误：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principles-cleancode-5.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">上图的结构我们是常见的，比如说首页的标题，那么我们就应该注意了，不能把&#8220;&lt;h1&gt;&#8221;放在&#8220;&lt;a&gt;&#8221;标签中，换句话说，就是不能么块元素和在行内元素中。上面只是一个例子，只是希望大家在平时的制作中不应该犯这样的超级错误。</p><h4>六、删除不必要的标签</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">首先我们一起来看一个实例的截图：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principles-cleancode-6.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">上图明显是一个导航菜单的制作，在上图的实例中：有一个&#8220;div#topNav&#8221;包住了列表&#8220;ul#bigBarNavigation&#8221;，而&#8220;div&#8221;和&#8220;ul&#8221;列表都是块元素，加上&#8220;div&#8221;此处用来包&#8220;ul&#8221;根本就没有起到任何作用。虽然&#8220;div&#8221;的出现给我们制作web页面带来了极大的好处，但我们也没有必要到处这样的乱用，不知道大家平时有没有注意这样的细节呢？我是犯这样的错误，如果你也有过这样的经历，那么从今天开始，从现在开始，我们一起努力来改正这样的错误。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">有关于如何正确的使用标签，大家感兴趣的话可以点击：<a href="http://csscreator.com/?q=divitis" target="_blank" style="text-decoration: none; color: #5e9040; ">Divitis: what it is, and how to cure it.</a></p><h4>七、使用更好的命名</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">这里所说的命名就是给你的页面中相关元素定义类名或者是ID名，很多同学都有这栗的习惯，比如说有一个元素字体是红色的，给他加上&#8220;red&#8221;,甚至布局都写&#8220;left-sidebar&#8221;等，但是你有没有想过，如果这个元素定义了&#8220;red&#8221;后，过几天客户要求使用&#8220;蓝色&#8221;呢？或者又说，那时的&#8220;left-sidebar&#8221;边栏此时不想放在左边了，而是想放在右边，那么这样一来我们前面的命名可以说是一点意义都没有了，正如下面的一个图所示：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principle-cleancode-7.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">那么定义一个好的名就很得要了，不但自己能看懂你的代码，而且别人也能轻松读懂你的代码，比如说一个好的类名和ID名&#8220;mainNav&#8221;、&#8220;subNav&#8221;、&#8220;footer&#8221;等，他能描述所包含的事情。不好的呢，比如前面所说的。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">如果想了解更多这方面的知识，可以点击：</p><ol style="margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-left: 25px; font-size: 12px; background-color: #ffffff; color: #222222; font-family: Arial, Helvetica, 宋体; "><li><a href="http://www.techrepublic.com/article/standardizing-css-class-and-id-names/5286783" target="_blank" style="text-decoration: none; color: #5e9040; ">Standardizing CSS class and id names</a></li><li><a href="http://sixrevisions.com/css/css-tips/css-tip-2-structural-naming-convention-in-css/" target="_blank" style="text-decoration: none; color: #5e9040; ">CSS Tip #2: Structural Naming Convention in CSS</a></li><li><a href="http://woork.blogspot.com/2008/11/css-coding-semantic-approach-in-naming.html" target="_blank" style="text-decoration: none; color: #5e9040; ">CSS coding: semantic approach in naming convention</a></li><li><a href="http://www.realdealmarketing.net/docs/css-coding-style.php" target="_blank" style="text-decoration: none; color: #5e9040; ">CSS Naming Conventions and Coding Style</a></li></ol><h4>八、离开版本的CSS</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">我们在设计菜单时，有时要求所有菜单选项的文本全部大写，大家平时是不是直接在HTML标签中就将他们设置成大写状态呢？如果是的话，我觉得不好，如果为了将来具有更好的扩展性，我们不应该在HTML就将他们设置为全部大写，更好的解决方法是通过CSS来实现：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principle-cleancode-8.png" /></p><h4>九、定义&lt;body&gt;的类名或ID名</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">大家平时制作web页面时不知道有没有碰到这样的问题，就是整站下来，使用了相同的布局和结构，换句话说，你在页面的布局上使用了相同的结构，相同的类名，但是突然你的上级主管说应客户的需求，有一个页面的布局需要边栏和主内容对换一下。此时你又不想为了改变一下布局而修改整个页面的结构，此时有一个很好的解决办法，就是在你的这个页面中的&#8220;&lt;body&gt;&#8221;中定义一个特殊的类名或ID名，这样来你就可以轻松的达到你所要的需求。这样的使用，不知道大家使用过没有：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principle-cleancode-9.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">给&#8220;&lt;body&gt;&#8221;定义独特的类和ID名称是非常强大的，不仅仅是为了像上面一样帮你改变布局，最主要的是有时他能帮你实现页面中的某一部分达到特殊效果，而又不影响其它页面的效果。为什么有这样的功能，不用我说我想大家都是知道的。因为每个页面的内容都是&#8220;&lt;body&gt;&#8221;的后代元素。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">如果想了解更多这方面的知识，可以点击：</p><ol style="margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-left: 25px; font-size: 12px; background-color: #ffffff; color: #222222; font-family: Arial, Helvetica, 宋体; "><li><a href="http://css-tricks.com/id-your-body-for-greater-css-control-and-specificity/" target="_blank" style="text-decoration: none; color: #5e9040; ">ID Your Body For Greater CSS Control and Specificity</a></li><li><a href="http://www.37signals.com/svn/archives2/case_study_reusing_styles_with_a_body_class.php" target="_blank" style="text-decoration: none; color: #5e9040; ">Case study: Re-using styles with a body class</a></li></ol><h4>十、验证你的代码</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">人不免会出错，我们编写代码的时候也是一样的，你有时候总会小写或多写，比如说忘了关闭你的元素标签，不记得写上元素必须的属性，虽然有一些错误不会给你带来什么灾难性的后果，但也不免会给你带来你无法意估的错误。所以建议您写完代码的时候去验证你一下你的代码。验证后的代码总是比不验证的代码强：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principle-cleancode-10.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">为一有效的验证你的代码，我们可以使用相关的工具或者浏览器的插件来帮助我们完成。如果你的代码没有任何错误，W3C验证工具会在你们面前呈现绿色的文字，这样让你是无比的激动人心，因为再次证明了你写的代码经得起W3Ｃ的标准。</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">如果想了解更多这方面的知识，可以点击：</p><ol style="margin-top: 10px; margin-right: 10px; margin-bottom: 10px; margin-left: 10px; padding-left: 25px; font-size: 12px; background-color: #ffffff; color: #222222; font-family: Arial, Helvetica, 宋体; "><li><a href="http://validator.w3.org/" target="_blank" style="text-decoration: none; color: #5e9040; ">The W3C Markup Validation Service</a></li><li><a href="http://xhtml-css.com/" target="_blank" style="text-decoration: none; color: #5e9040; ">XHTML-CSS Validator</a></li><li><a href="http://freesitevalidator.com/" target="_blank" style="text-decoration: none; color: #5e9040; ">Free Site Validator (checks entire site, not just one page)</a></li></ol><h4>十一、逻辑顺序</h4><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">这是一个很少见的错误情况，因为我想大家写页面都不会把逻辑顺序打乱，换句话说，如果可能的话，让你的网站具有一个先后逻辑顺序是最好的，比如说先写页头，在写页体，最后写页脚。当然有时也会碰到特殊情况，如何页脚部分在于我们代码的边栏以上，这可能是因为它最适合你的网站设计需求，这样或许是可以理解的，但是如果你有别的方式实现，我们都应该把页脚是放在一个页面的最后，然后在通过特定的技术让它达到你的设计需求：</p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; "><img alt="" src="http://www.w3cplus.com/sites/default/files/principle-cleancode-11.png" /></p><p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 0px; color: #222222; font-family: Arial, Helvetica, 宋体; font-size: 12px; background-color: #ffffff; ">上面我们一起讨论了多个如何让你开始写一个整洁的HTML代码。从一个项目的开始，这一切都是非常容易的，但是如果需要你去修复一个现有的代码，那多少都会有一定的难度。上面说这么多主要是告诉您将要如何学习编写一个良好的、整洁的HTML代码，并且一直坚持这样的编写。希望读完这篇文章垢，在你的下一个项目中，你能从头开始，坚持写一个整洁的HTML代码。希望大家喜欢这样的教程。最后在结束此教程之前，让我们大家一起来感谢<a title="Posts by Chris Coyier" href="http://coding.smashingmagazine.com/author/chris-coyier/" rel="author" target="_blank" style="text-decoration: none; color: #5e9040; ">Chris Coyier</a>给我们带来这么好的经验之谈&#8212;&#8212;《<a href="http://coding.smashingmagazine.com/2008/11/12/12-principles-for-keeping-your-code-clean/" target="_blank" style="text-decoration: none; color: #5e9040; ">12 Principles For Keeping Your Code Clean</a>》如果你有什么好的经验，希望与我们一起分享。</p></div><img src ="http://www.blogjava.net/xcp/aggbug/366001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xcp/" target="_blank">xcp</a> 2011-12-09 22:13 <a href="http://www.blogjava.net/xcp/archive/2011/12/09/366001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>