??xml version="1.0" encoding="utf-8" standalone="yes"?>香蕉大伊亚洲人在线观看,国产成人精品久久亚洲,亚洲欧洲专线一区http://www.tkk7.com/kiant/category/34315.html有才而性缓定属大才Q有气和斯为大智。h偏狭我受之以宽容Qh险仄我持之以坦荡。缓事宜急干Q敏则有功;急事宜缓办,忙则多措? --李叔?/description>zh-cnTue, 13 Apr 2010 18:07:30 GMTTue, 13 Apr 2010 18:07:30 GMT60SQL Server、MySQL?Oracle的行合ƈhttp://www.tkk7.com/kiant/articles/317866.html黄小?/dc:creator>黄小?/author>Fri, 09 Apr 2010 08:24:00 GMThttp://www.tkk7.com/kiant/articles/317866.htmlhttp://www.tkk7.com/kiant/comments/317866.htmlhttp://www.tkk7.com/kiant/articles/317866.html#Feedback0http://www.tkk7.com/kiant/comments/commentRss/317866.htmlhttp://www.tkk7.com/kiant/services/trackbacks/317866.html 内容引自Q?br /> 多行一列数据合q成一行一列数?br /> http://topic.csdn.net/u/20090714/17/5FE6A0F7-CE78-4936-BE31-21D462236059.html

在MySQL和Oracle中实现行合ƈ
http://www.tkk7.com/rain1102/archive/2009/06/24/283867.html


SQL Server
--SQL2005中的Ҏ2 
create table tb(id int, value varchar(10)) 
insert into tb values(1'aa'
insert into tb values(1'bb'
insert into tb values(2'aaa'
insert into tb values(2'bbb'
insert into tb values(2'ccc'
go 

select id, [values]=stuff((select ','+[value] from tb t where id=tb.id 
for xml path('')), 11''
from tb 
group by id 

/* 
id          values 
----------- -------------------- 
1          aa,bb 
2          aaa,bbb,ccc 

(2 row(s) affected) 

*/ 

drop table tb 


MySQL
select name , group_concat(email order by email separator ", ") as email from student group by name


Oracle
如果以上效果惛_Oracle中显C? 则比较复杂点? 因ؓOracle中没有行合ƈ函数, 则需要用sys_connect_by_path()来实? 代码如下:
select name, ltrim(sys_connect_by_path(email,','),',') email from(
select name,email,
row_number() 
over(partition by name order by email) rn,
count(*over(partition by name) cnt
from student 
where level = cnt
start 
with rn = 1
connect 
by prior name = name and prior rn + 1 = rn 


]]>
标量子查?/title><link>http://www.tkk7.com/kiant/articles/286847.html</link><dc:creator>黄小?/dc:creator><author>黄小?/author><pubDate>Wed, 15 Jul 2009 04:47:00 GMT</pubDate><guid>http://www.tkk7.com/kiant/articles/286847.html</guid><wfw:comment>http://www.tkk7.com/kiant/comments/286847.html</wfw:comment><comments>http://www.tkk7.com/kiant/articles/286847.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kiant/comments/commentRss/286847.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kiant/services/trackbacks/286847.html</trackback:ping><description><![CDATA[<br /> <fieldset><legend>引用: 标量子查?/legend> <p>一个标量子查询是一个放在圆括弧里的普?SELECT查询Q?它只q回只有一个字D늚一行.Q参?Chapter 4 获取有关写查询的信息。) ?SELECT 被执行Q?而其单个q回值将在周围的D辑ּ中用. 把一个返回超q一行或者超q一列的查询用做标量查询是错误的Q?(不过Q在特定的执行中Q子查询不返回行则不错误;标量l果认ؓ?NULLQ?该子查询可以引用周围查询的变量, 那些变量也是在计Q意子查询的时候当做常量用的Q?又见 Section 6.15Q?</p> <p>比如Q下面的查询扑և每个州中的最大h口数量的城市?</p> <p>SELECT name, (SELECT max(pop) FROM cities WHERE cities.state = states.name)<br /> FROM states;</p> </fieldset><br /> <br /> <a target="_blank">子查询作为标量操作数--MySql数据?/a><br /> ps: q种Ҏ的只能查询单一?br /> <br /> <a target="_blank">《Oracle 高效设计?M思?-标量子查询查询性能讨论 </a><br /> 能提供不思\<br /> <br /> <br /> <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"><img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /><span style="color: #0000ff">select</span><span style="color: #000000">     n.ex_name,     c.customer_name,     n.remark,          e.employee_name </span><span style="color: #0000ff">as</span><span style="color: #000000"> create_name,     n.create_user,         n.project_id,   n.id </span><span style="color: #0000ff">as</span><span style="color: #000000"> node_id,         n.model_id,     n.</span><span style="color: #ff00ff">file_id</span><span style="color: #000000">,             g.grade_name </span><span style="color: #0000ff">as</span><span style="color: #000000"> level_name,     t.type </span><span style="color: #0000ff">as</span><span style="color: #000000"> type_name,     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />         exe.exe_ids,  exe.exe_names,    dept.dept_ids,         dept.dept_names,      <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />    </span><span style="color: #ff00ff">Convert</span><span style="color: #000000">(DATE_FORMAT(pn.node_end_time, </span><span style="color: #ff0000">'</span><span style="color: #ff0000">%Yq?c?e?/span><span style="color: #ff0000">'</span><span style="color: #000000">) USING utf8) </span><span style="color: #0000ff">as</span><span style="color: #000000"> end_time     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">from</span><span style="color: #000000">     hrp_project_execution n <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_cycle_grade g </span><span style="color: #0000ff">on</span><span style="color: #000000"> g.id </span><span style="color: #808080">=</span><span style="color: #000000"> n.worklevel     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_work_type t </span><span style="color: #0000ff">on</span><span style="color: #000000"> t.id </span><span style="color: #808080">=</span><span style="color: #000000"> n.worktype     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_customer c </span><span style="color: #0000ff">on</span><span style="color: #000000"> c.id </span><span style="color: #808080">=</span><span style="color: #000000"> n.customer_id     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_company_employee_info e </span><span style="color: #0000ff">on</span><span style="color: #000000"> e.id </span><span style="color: #808080">=</span><span style="color: #000000"> n.create_user     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_project_node pn </span><span style="color: #0000ff">on</span><span style="color: #000000"> pn.id </span><span style="color: #808080">=</span><span style="color: #000000"> n.node_id<br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> (</span><span style="color: #0000ff">select</span><span style="color: #000000"> ne.execution_id, </span><span style="color: #ff00ff">Convert</span><span style="color: #000000">(GROUP_CONCAT(ne.executor_id) USING utf8) </span><span style="color: #0000ff">as</span><span style="color: #000000"> exe_ids,      GROUP_CONCAT(e.employee_name) </span><span style="color: #0000ff">as</span><span style="color: #000000"> exe_names  <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />       </span><span style="color: #0000ff">from</span><span style="color: #000000">  hrp_project_execution_executor ne     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />       </span><span style="color: #0000ff">inner</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_company_employee_info e </span><span style="color: #0000ff">on</span><span style="color: #000000"> e.id </span><span style="color: #808080">=</span><span style="color: #000000"> ne.executor_id     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />       </span><span style="color: #0000ff">where</span><span style="color: #000000"> ne.delete_flag </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">       </span><span style="color: #808080">and</span><span style="color: #000000">    ne.execution_id </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">46</span><span style="color: #000000">  </span><span style="color: #0000ff">group</span><span style="color: #000000"> </span><span style="color: #0000ff">by</span><span style="color: #000000"> ne.execution_id <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />       ) exe </span><span style="color: #0000ff">on</span><span style="color: #000000"> exe.execution_id </span><span style="color: #808080">=</span><span style="color: #000000"> n.id<br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> (</span><span style="color: #0000ff">select</span><span style="color: #000000"> de.exectuion_id, </span><span style="color: #ff00ff">Convert</span><span style="color: #000000">(GROUP_CONCAT(de.deptor_id) USING utf8) </span><span style="color: #0000ff">as</span><span style="color: #000000"> dept_ids,          GROUP_CONCAT(e.employee_name) </span><span style="color: #0000ff">as</span><span style="color: #000000"> dept_names  <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />       </span><span style="color: #0000ff">from</span><span style="color: #000000">  hrp_project_execution_deptor de     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />       </span><span style="color: #0000ff">inner</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_company_employee_info e </span><span style="color: #0000ff">on</span><span style="color: #000000"> e.id </span><span style="color: #808080">=</span><span style="color: #000000"> de.deptor_id     <br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />       </span><span style="color: #0000ff">where</span><span style="color: #000000"> de.delete_flag </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">       </span><span style="color: #808080">and</span><span style="color: #000000">    de.exectuion_id </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">46</span><span style="color: #000000">  </span><span style="color: #0000ff">group</span><span style="color: #000000"> </span><span style="color: #0000ff">by</span><span style="color: #000000"> de.exectuion_id<br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" />       ) dept </span><span style="color: #0000ff">on</span><span style="color: #000000"> dept.exectuion_id </span><span style="color: #808080">=</span><span style="color: #000000"> n.id<br /> <img src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="color: #0000ff">where</span><span style="color: #000000">    n.id </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">46</span></div> <span style="font-size: 8pt"><em>ps. 自己写的部分, 东西镶嵌?left join 部分</em></span> <img src ="http://www.tkk7.com/kiant/aggbug/286847.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kiant/" target="_blank">黄小?/a> 2009-07-15 12:47 <a href="http://www.tkk7.com/kiant/articles/286847.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个关?联合查询union 和排序order by 的例?/title><link>http://www.tkk7.com/kiant/articles/284131.html</link><dc:creator>黄小?/dc:creator><author>黄小?/author><pubDate>Thu, 25 Jun 2009 08:27:00 GMT</pubDate><guid>http://www.tkk7.com/kiant/articles/284131.html</guid><wfw:comment>http://www.tkk7.com/kiant/comments/284131.html</wfw:comment><comments>http://www.tkk7.com/kiant/articles/284131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kiant/comments/commentRss/284131.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kiant/services/trackbacks/284131.html</trackback:ping><description><![CDATA[其实q有更简单的Ҏ <fieldset><legend>Title</legend> <p>q可以把个别的select命o用圆括号Q这P可以Ҏơ查询以及最l结果做出limit和order by 讄?/p> <p>(select * from tbl1 order by colA limit 10) union (select * from tbl2 order by colA limit 10) order by </p> <p>coltimestamp limit 5</p> </fieldset><br /> <br /> <br /> <br /> <br /> <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"><img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="color: #808080">//</span><span style="color: #000000">查询有效期内的计划Q务节?br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        string sql </span><span style="color: #808080">=</span><span style="color: #000000"> "</span><span style="color: #0000ff">select</span><span style="color: #000000">     g.grade_name,   "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #ff0000">''</span><span style="color: #000000"> </span><span style="color: #0000ff">as</span><span style="color: #000000"> degree_name,"<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #ff0000">''</span><span style="color: #000000"> </span><span style="color: #0000ff">as</span><span style="color: #000000"> reason, "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #ff0000">'</span><span style="color: #ff0000">project_node</span><span style="color: #ff0000">'</span><span style="color: #000000"> </span><span style="color: #0000ff">as</span><span style="color: #000000"> node_type, "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #ff0000">''</span><span style="color: #000000"> </span><span style="color: #0000ff">as</span><span style="color: #000000"> fact_node_name, "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " p.create_time, "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    p.id,    p.project_id,     p.node_name,        p.deptids,"<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    p.node_begin_time,         p.node_end_time,    p.worklevel"<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    </span><span style="color: #0000ff">from</span><span style="color: #000000">     hrp_project_node p "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    </span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_cycle_grade g </span><span style="color: #0000ff">on</span><span style="color: #000000"> g.id </span><span style="color: #808080">=</span><span style="color: #000000"> p.worklevel "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    </span><span style="color: #0000ff">where</span><span style="color: #000000"> p.state </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">  </span><span style="color: #808080">and</span><span style="color: #000000">  p.node_state </span><span style="color: #808080"><></span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000"> "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #808080">and</span><span style="color: #000000"> UNIX_TIMESTAMP(p.node_begin_time) </span><span style="color: #808080"><</span><span style="color: #000000"> UNIX_TIMESTAMP(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">" + DateTime.Now.ToString() + "</span><span style="color: #ff0000">'</span><span style="color: #000000">) "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">//</span><span style="color: #000000">优先查出所?br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">//+</span><span style="color: #000000"> " </span><span style="color: #808080">and</span><span style="color: #000000"> UNIX_TIMESTAMP(p.node_end_time) </span><span style="color: #808080">></span><span style="color: #000000"> UNIX_TIMESTAMP(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "</span><span style="color: #ff0000">'</span><span style="color: #000000">) "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #808080">and</span><span style="color: #000000"> (p.exeids </span><span style="color: #808080">like</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">" + userId + "%</span><span style="color: #ff0000">'</span><span style="color: #000000"> </span><span style="color: #808080">or</span><span style="color: #000000"> p.exeids </span><span style="color: #808080">like</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">%," + userId + "%</span><span style="color: #ff0000">'</span><span style="color: #000000">) ";<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        </span><span style="color: #808080">//</span><span style="color: #000000">合ƈq未执行的Q务节?br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        sql </span><span style="color: #808080">+=</span><span style="color: #000000"> " </span><span style="color: #0000ff">union</span><span style="color: #000000"> </span><span style="color: #808080">all</span><span style="color: #000000"> "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #0000ff">select</span><span style="color: #000000">     g.grade_name,   "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #ff0000">''</span><span style="color: #000000"> </span><span style="color: #0000ff">as</span><span style="color: #000000"> degree_name,"<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #ff0000">''</span><span style="color: #000000"> </span><span style="color: #0000ff">as</span><span style="color: #000000"> reason, "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #ff0000">'</span><span style="color: #ff0000">fact_node</span><span style="color: #ff0000">'</span><span style="color: #000000"> </span><span style="color: #0000ff">as</span><span style="color: #000000"> node_type, "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #ff0000">''</span><span style="color: #000000"> </span><span style="color: #0000ff">as</span><span style="color: #000000"> fact_node_name, "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " f.create_time, "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    f.id,    f.project_id,     f.node_name,        f.deptids,"<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    f.fact_begin_time,         f.fact_end_time,    f.worklevel"<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    </span><span style="color: #0000ff">from</span><span style="color: #000000">     hrp_fact_node_execute f "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    </span><span style="color: #ff00ff">left</span><span style="color: #000000"> </span><span style="color: #0000ff">join</span><span style="color: #000000"> hrp_cycle_grade g </span><span style="color: #0000ff">on</span><span style="color: #000000"> g.id </span><span style="color: #808080">=</span><span style="color: #000000"> f.worklevel "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> "    </span><span style="color: #0000ff">where</span><span style="color: #000000"> f.state </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">  </span><span style="color: #808080">and</span><span style="color: #000000">  f.fact_state_id </span><span style="color: #808080">=</span><span style="color: #000000"> </span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000"> "<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />            </span><span style="color: #808080">+</span><span style="color: #000000"> " </span><span style="color: #808080">and</span><span style="color: #000000"> (f.exeids </span><span style="color: #808080">like</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">" + userId + "%</span><span style="color: #ff0000">'</span><span style="color: #000000"> </span><span style="color: #808080">or</span><span style="color: #000000"> f.exeids </span><span style="color: #808080">like</span><span style="color: #000000"> </span><span style="color: #ff0000">'</span><span style="color: #ff0000">%," + userId + "%</span><span style="color: #ff0000">'</span><span style="color: #000000">) ";<br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /> <img alt="" src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align="top" />        sql </span><span style="color: #808080">=</span><span style="color: #000000"> string.Format("</span><span style="color: #0000ff">select</span><span style="color: #000000"> </span><span style="color: #808080">*</span><span style="color: #000000"> </span><span style="color: #0000ff">from</span><span style="color: #000000"> ({</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">}) </span><span style="color: #0000ff">as</span><span style="color: #000000"> t1  </span><span style="color: #0000ff">order</span><span style="color: #000000"> </span><span style="color: #0000ff">by</span><span style="color: #000000"> create_time </span><span style="color: #0000ff">desc</span><span style="color: #000000">", sql);</span></div> <br /> <br /> ps: 我记得这L一帖子好像发表过, 奇怪ؓ什么不找不C??<br /> 当时q参考了别h的博? <br /> qLing.... ? ?google.com搞得心神不宁啊~~~~ <img src ="http://www.tkk7.com/kiant/aggbug/284131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kiant/" target="_blank">黄小?/a> 2009-06-25 16:27 <a href="http://www.tkk7.com/kiant/articles/284131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle W记Q六Q、表的管理(U束、烦引、锁定、表分区Q?/title><link>http://www.tkk7.com/kiant/articles/236263.html</link><dc:creator>黄小?/dc:creator><author>黄小?/author><pubDate>Tue, 28 Oct 2008 13:15:00 GMT</pubDate><guid>http://www.tkk7.com/kiant/articles/236263.html</guid><wfw:comment>http://www.tkk7.com/kiant/comments/236263.html</wfw:comment><comments>http://www.tkk7.com/kiant/articles/236263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kiant/comments/commentRss/236263.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kiant/services/trackbacks/236263.html</trackback:ping><description><![CDATA[<br /> <br /> <strong><span style="font-size: 14pt;">一、表完整性与U束</span></strong><br /> <br /> 实体完整性:主键U束<br /> 域完整?br /> 参照完整性:外键U束<br /> <br /> SELECT constraint_name, constraint_type FROM user_constriants WHERE table_name = 'EMP';<br /> <br /> <br /> <br /> <strong><span style="font-size: 14pt;">二、管理烦?/span></strong><br />     索引是徏立在表字D上的一U存储结构,利用索引可以加快表的查询速度。当索引键列用于 SQL 语句?WHERE 子句Ӟ该烦引将直接指向包含q些值得行位|,合理使用索引是减磁?I/O 的主要方法,它只影响执行的速度?br /> <br />     创徏索引ӞOracle 获取要创徏索引的列Qƈ对其q行排序。然后将 ROWID q同每一行的索引值存储v来。用时QOracle 先通过已排序的索引值执行快速搜索,然后使用相关联的 ROWID 值来定位h所要查扄记录行?br /> <br />     一旦创建烦引,Oracle 会自动维护和使用它们。更新行记录Ӟ会自动更新烦引,所以ؓ表创多的索引会降低表的性能?br /> <br />     获得索引信息 user_indexes 视图?br /> <br />     重徏现有的烦引性能要优于删除重建烦引?nbsp; ALTER INDEX item_index REBUILD;<br />   <br /> <strong><br /> 2.0、传l的 B树烦引:</strong><br /> CREATE INDEX ix_mm ON mm(m1);<br /> <br /> <br /> <strong>2.1、唯一索引Q?/strong>唯一U束是唯一索引Q但唯一索引未必是唯一U束?br /> CREATE UNIQUE INDEX myidx ON mm(m2);<br /> <br /> <br /> <strong>2.2、组合烦引:</strong>在表中多个列上创建的索引。如?SELECT 语句?WHERE 子句引用了组合烦引中的所有列或大多数列,则组合烦引可以提高数据检索速度。通常创徏索引时最频繁讉K的列应该攑֜列表的最前面?br /> CREATE INDEX comp_index ON itemfile(p_category, itemrate);<br /> <br /> <br /> <strong>2.3、反向键索引Q?/strong>Ҏ的烦引,在烦引含有序数的列时非常有用Q反向键索引通过单的反向被烦引中的数据来解决问题?br /> CREATE INDEX rev_index ON itemfile(itemcode) REVERSE;<br /> <br /> ps.可以使用 NOREVERSE 反向键索引重徏为标准烦引,但不能将标准索引重徏为反向键索引?br /> ALTER INDEX rev_index REBUILD NOREVERSE;<br /> <br /> <br /> <strong>2.4、位囄引:</strong>表里数据量大Q但表的唯一值少。位囄引用每个键值的位图Q而不是用 ROWID 列表?br /> CREATE BITMAP INDEX bit_emp ON emp(sex);<br /> <br /> <br /> 2.5、烦引组l表<br /> <br /> 2.6、基于函数的索引<br /> <br /> 2.7、烦引中的分?br /> <br /> <br /> <br /> <a name='3' id='3'></a><strong><span style="font-size: 14pt;">三、锁?/span></strong><br /> 锁定是数据库用来控制׃n资源q发讉K的机制。当更新数据的时候,Oracle 会自动将光定,其他用户只能查看该数据,直至回滚或提交事务后Q锁才会释放Q其他用h能编辑?br /> <br /> <strong>3.1、行U锁</strong><br /> 行锁只对用h在访问的行进行锁定。在使用 INSERT、UPDATE、DELETE ?SELECT ... FOR UPDATE {语句时QOracle 会自动应用行锁定?br /> <blockquote>SELECT * FROM order_master WHERE vencode = 'V002'<br />   FOR UPDATE WAIT 5;<br /> UPDATE .....<br /> COMMIT;<br /> </blockquote><br /> <strong>3.2、表U锁</strong><br /> 表所保护数据,在事务处理过E中Q表U锁会限制对整个表的增、删、改操作?br /> <blockquote>LOCK TABLE <table_name> IN <look_mode> MODE [NOWAIT];<br /> ?行共享(ROW SHARE, RSQ?br /> ?行排他(ROW EXCLUSIVE, RXQ?br /> ?׃nQSHARE, SQ?br /> ?׃n行排他(SHARE ROW EXCLUSIVE, SRXQ?br /> ?排他QEXCLUSIVE, XQ?br /> </blockquote><br /> <strong>3.3、死?/strong><br /> 两个事务怺{待Ҏ完成dQ就会出现死锁。Oracle 自动检死锁,q过l止两个事务处理之一来解决问题?br /> <br /> <br /> <br /> <a name='4' id='4'></a><strong><span style="font-size: 14pt;">四、表分区</span></strong><br />     Oracle 提供表分区技术,以来改善大型应用pȝ的性能。表分区允许用户把一个表中所有的行分为几个部分,q将q些部分存储在不同的位置。在大型表中利用表分区,能改善表查询性能、方便管理表Q以及备份\恢复、提高数据安全性?br /> <br />     表分区对用户佉K明的,用户在更新和查询时把分区表当作普通表使用。CREATE TABLE 语句中增?PARTTION 子句以创分区?br /> <br /> ps.要分区的表不能具?LONG ?LONG RAW 数据cd的列?br /> <br /> <br /> <strong>4.1、范围分?/strong><br /> Ҏ表某一个列或一l列的D_军_该数据存储在哪个分区上?br /> 例如Q对 sales 表的 sales_cost 列D行分?br /> <blockquote>CREATE TABLE sales<br /> (<br />   ...<br /> )<br /> PARTTION BY RANGE (sales_cost)<br /> (<br />   PARTTION P1 VALUES LESS THAN (1000),<br />   PARTTION P2 VALUES LESS THAN (2000),<br />   PARTTION P3 VALUES LESS THAN (3000),<br />   PARTTION P4 VALUES LESS THAN (MAXVALUE)    /* 大于3000的其他值都存储于分?P4 */<br /> );<br /> </blockquote><br /> <strong>4.2、散列分?/strong><br /> 散列分区通过在分区键g执行一个散列函数来军_数据的物理位|。散列分区把记录q_地分布到不同的分区,减少了磁?I/O 争用的可能性?br /> 例如Q创?employer 表按?department 列分区成 4个散列分?br /> <blockquote>CREATE TABLE employer<br /> (<br />   ...<br /> )<br /> PAERTTION BY HASH (department) PARTTIONS 4;<br /> </blockquote><br /> <strong>4.3、复合分?/strong><br /> 复合分区是范围分区和散列分区的结合。在创徏复合分区Ӟ先根据范围对数据q行分区Q然后再散列分区内创建散列子分区?br /> 例如Q创?sales3 表,分区为复合分区,先根?sales_date 列创围分区,然后再分区内Ҏ product_id 创徏子分区?br /> <blockquote>CREATE TABLE sales<br /> (<br />   ...<br /> )<br /> PARTTION BY RANGE (sales_date)<br /> SUBPARTTION BY HASH (product_id) SUBPARTTION 5<br /> (<br />   PARTTION P1 VALUES LESS THEN (DATE '2001-04-01'),<br />   PARTTION P2 VALUES LESS THEN (DATE '2001-07-01'),<br />   PARTTION P3 VALUES LESS THEN (DATE '2001-09-01'),<br />   PARTTION P4 VALUES LESS THEN (MAXVALUE)<br /> );<br /> </blockquote><br /> <strong>4.4、列表分?/strong><br /> 列表分区允许用户明确地控制行到分区的映射。列表分区允许按自然方式Ҏ序和不相关的数据集进行分l和l织?br /> 例如Q根据职员住址 emp_address 列对 employee 表进行分区,q对不同地Z同存放?br /> <blockquote>CREATE TABLE employee<br /> (<br />   ...<br /> )<br /> PARTTION BY LIST (emp_address )<br /> (<br />   PARTTION north VALUES ('芝加?),<br />   PARTTION west VALUES ('旧金?, 'z杉?),<br />   PARTTION south VALUES ('亚特兰大', '达拉?, '休斯?),<br />   PARTTION east VALUES ('U约' ,'波士?),<br />   PARTTION aa VALUES (DEFAULT)            /* 其他的地址存储 aa 分区Q不指定则不接受其他地址输入 */<br /> );<br /> </blockquote><br /> <br /> 插入数据?Oracle 会根据分区列的值将记录存储到对应的分区?br /> 查询分区数据Q?nbsp;   SELECT * FROM sales3 PARTTION (P3);<br /> <br /> <br /> <strong>分区的维护操作:</strong><br /> 分区的维护操作时修改分区表的分区Q以获得更佳?I/O 负蝲q?br /> <br /> <strong>1、添加分区:</strong>在最后一个分Z后添加新的分区?br /> ALTER TABLE sales ADD PARTTION P4 VALUES LESS THEN (4000);<br /> <br /> <strong>2、删除分区:</strong>删除分区Ӟ分区中数据也随之删除?br /> ALTER TABLE sales DROP PARTTION P4;<br /> <br /> <strong>3、截断分区:</strong>删除表分区的所有记录?br /> ALTER TABLE sales TRUNCATE PARTTION P3;<br /> <br /> <strong>4、合q分区:</strong>可将分范围分区或复合分区表的两个盔R分区q接h。结果分区将l承两个分区的上界?br /> ALTER TABLE sales MERGE PARTTIONS P1, P2 INTO PARTTION P2;<br /> <br /> <strong>5、拆分分区:</strong>允许用户一个分区拆分成两个分区?br /> /* ?'2005-01-01' 为分界拆分一个分区数?*/<br /> ALTER TABLE sales SPLIT PARTTION P3 AT (DATE '2005-01-01') <br />   INTO (PARTTION P31, PARTTION P32);<br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.tkk7.com/kiant/aggbug/236263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kiant/" target="_blank">黄小?/a> 2008-10-28 21:15 <a href="http://www.tkk7.com/kiant/articles/236263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle W记Q十Q、视图、同义词、序?/title><link>http://www.tkk7.com/kiant/articles/237151.html</link><dc:creator>黄小?/dc:creator><author>黄小?/author><pubDate>Tue, 28 Oct 2008 08:51:00 GMT</pubDate><guid>http://www.tkk7.com/kiant/articles/237151.html</guid><wfw:comment>http://www.tkk7.com/kiant/comments/237151.html</wfw:comment><comments>http://www.tkk7.com/kiant/articles/237151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kiant/comments/commentRss/237151.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kiant/services/trackbacks/237151.html</trackback:ping><description><![CDATA[<br /> <br /> <a href="#1">一、视?/a><br /> <a href="#2">二、同义词</a><br /> <a href="#3">三、序?/a><br /> <br /> <br /> <br /> <a name='1' id='1'></a><strong><span style="font-size: 14pt;">一、视?/span></strong><br />     视图是一条存储v来的 SELECT 语句Q是数据的显C方式,通过视图可以限制用户讉K行、列、或更新表内宏V?br /> <br /> <br /> <strong>1.1、基?/strong><br /> l成视图的表UCؓ。在 Oracle 中,不能Ҏ多个的视图进行更斎ͼ此类操作可以利用"替换触发?完成?br /> <br /> <br /> <strong>1.2、视囄更新U束</strong><br /> [WITH CHECK OPTION] 选项可以U束 对视图更新?W合 视图的WHERE条g?br /> <br /> <br /> <strong>1.3、只ȝ?/strong><br /> [WITH READ ONLY] 选项?视图查询语句包含 GROPU BY/SUM {聚合函数、DISTINCT 关键字时视图不允许更新?br /> <br /> <br /> <strong>1.4、查看视囑ֆ?/strong><br /> DESC user_views;<br /> SELECT text FROM user_views WHERE view_name='V_READ';<br /> <br /> 一个视囄例子Q?br /> <blockquote>CREATE OR REPLACE VIEW myview<br /> AS<br /> SELECT * FROM books WHERE price>30<br /> WITH CHECK OPTION;<br /> /* 当利用视图插入一?price<=30 的数据时会报?*/<br /> </blockquote><br /> <br /> <br /> <a name='2' id='2'></a><strong><span style="font-size: 14pt;">二、同义词</span></strong><br /> 同义词是一个对象的一个别名,利用同义词,可以方便的操U不同用h式下的对象,化编码?br /> <br /> 使用同义词之前要保用户拥有讉K该对象的权限?br /> 当公有对象(公有同义词)和本地对象具有相同的名称Ӟ本地对象优先?br /> <blockquote>?公有同义词:DBA建立Q所有用户共同拥有。CREATE PUBLIC SYNONYM ...<br /> ?U有同义词:用户建立Q用与该用P对象Q可被授权)?br /> <br /> CREATE OR REPLACE SYNONYM dept  FOR scott.dept;<br /> SELECT * FROM dept;<br /> <br /> </blockquote>DESC user_synonyms;<br /> SELECT synonym_name, table_name, table_owner FROM user_synonyms;<br /> <br /> <br /> <br /> <a name='3' id='3'></a><strong><span style="font-size: 14pt;">三、序?/span></strong><br />     序列是用来生成唯一、连l的整数的数据库对象。它通常用来自动生成主键或唯一键。序列可以按升序、降序排列?br /> 序列是一个独立型事务Q不受提交或回滚事务影响?br /> <br /> <br /> <strong>3.1、创?/strong><br /> <blockquote>CREATE SEQUENCE sequence_name<br />   [START WITH integer]            /* 序列起始|升序默认为最|降序默认为最大?*/<br />   [INCREMENT BY integer]        /* 递增量,默认?1Q?*/<br />   [MAXVALUE integer | NOMAXVALUE]    /* 最大|默认?NOMAXVALUE */<br />   [MINVALUE integer | NOMINVALUE]    /* 最|必须于{于起始值和 于最大?*/<br />   [CYCLE | NOCYCLE]            /* 序列到达最大值后是否循环Q默认ؓ NOCYCLE 不@?*/<br />   [CACHE integer | NOCACHE];        /* 是否预分配序列号Q默认缓?0个序列号 */<br /> </blockquote><br /> <strong>3.2、访?/strong><br />   NEXTVAL 伪列Q返回一个新的序列倹{?br />   CURRVAL 伪列Q内存中最后一ơ引?NEXTVAL 的返回|也就是序列的当前倹{?br /> <br /> INSERT INTO t1 VALUES(t1_seq.NEXTVAL, 'aaa');<br /> SELECT t1_seq.CURRVAL FROM dual;<br /> <br /> <br /> <strong>3.3、修?/strong><br />     序列建立后只能修?最?最倹{增量倹{序列号~存大小Q不能修改v始|q且保证序列最?最值符合规则?br /> <br /> <br /> <strong>3.4、查?/strong><br /> DESC user_sequences;<br /> SELECT * FROM user_sequences WHERE SEQUENCE_NAME = 'T1_SEQ';<br /> <br /> <br /> <br /> <img src ="http://www.tkk7.com/kiant/aggbug/237151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kiant/" target="_blank">黄小?/a> 2008-10-28 16:51 <a href="http://www.tkk7.com/kiant/articles/237151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle W记Q九Q、触发器http://www.tkk7.com/kiant/articles/236787.html黄小?/dc:creator>黄小?/author>Sun, 26 Oct 2008 16:16:00 GMThttp://www.tkk7.com/kiant/articles/236787.htmlhttp://www.tkk7.com/kiant/comments/236787.htmlhttp://www.tkk7.com/kiant/articles/236787.html#Feedback0http://www.tkk7.com/kiant/comments/commentRss/236787.htmlhttp://www.tkk7.com/kiant/services/trackbacks/236787.html
一、行U触发器
二、语句触发?/a>
三、替换触发器
四、模式触发?/a>
五、数据库U触发器



    1、触发器一旦创建就会立ȝ效,有时可能需要时禁用触发器Q最常见的原因就是涉及数据加载?br /> ALTER TRIGGER trigger_name [ENABLE | DISABLE];

    2、Oracle 触发器里两个重要的内存逻辑?:old ?:new?old 表保存的是在DML语句之前的数据,:new 表保存的是在DML语句创徏的数据?br />         old    new
INSERT    -    √
DELETE    √    -
UPDATE    √    √

    3、在触发器语句中不能昑ּ的提?回滚事务?br />



一、行U触发器
行触发器对 DML 语句影响的每个行执行一ơ。主要应用保持数据完整性?br />
例:两表U联更新Q修攚w门表~号的同时也修改员工表的部门~号Q?br /> CREATE OR REPLACE TRIGGER update_dept
  /* 行触发器,在更新部门表操作后触?*/
  AFTER UPDATE ON deptment
  FOR EACH ROW
BEGIN
  /* new、old 表的有效利用Q把旧表的id列?更新?新表的id列?*/
  UPDATE emp SET id=:new.id WHERE id=:old.id;
END;

UPDATE deptment SET id='yy' WHERE id='01';

SELECT * FROM deptment;
SELECT * FROM emp;


插入时利用触发器+序列实现整型字段的自增:
CREATE OR REPLACE TRIGGER set_no
  BEFORE INSERT ON auto
  FOR EACH ROW
DECLARE
  sn number(5);
BEGIN
  /* 触发器预处理序列的?*/
  SELECT myseq.nextval INTO sn FROM dual;
  :NEW.a := sn;
END;

INSERT INTO auto VALUES(21,'dtt');
SELECT * FROM auto;
/* 插入时表a列由触发器生的值替代用L输入 */


二、语句触发?/span>
只与语句有关Q与行无养I不涉及数据完整性问题?br />
例如Q利用触发器记录Q记录某表中用户的操作(日志处理Q?br /> CREATE OR REPLACE TRIGGER dm1_aa
  AFTER INSERT OR DELETE OR UPDATE ON aa
BEGIN
  IF INSERTING THEN
    INSERT INTO mylog VALUES(user,sysdate,'I');
  ELSEIF DELETING THEN
    INSERT INTO mylog VALUES(user,sysdate,'D');
  ELSE
    INSERT INTO mylog VALUES(user,sysdate,'U');
  END IF;
END;
ps.能否记录多个表?"after insert or delete or update on t1,t2" 出错?br />


三、替换触发器
解决Oracle视图中多表更新的限制Q只能在视图中用,属于行触发器?br />
例如Q在视图中插入新的部门同时插入其所属的新员工:
CREATE OF REPLACE TRIGGER tr_v_e_d
  /* 在视图上创徏替换触发?*/
  INSTEAD OF INSERT ON v_emp_dept
  FOR EACH ROW
BEGIN
  /* 替换触发器先插入部门表的信息Q然后再插入其所属员工表的信?*/
  INSERT INTO deptment VALUES(:new.id, :new.name);
  INSERT INTO emp(eid, ename, sex, id) VALUES(:new.eid, :new.ename, :new.sex, :new.d);
END;

INSERT INTO v_emp_dept VALUES('456', 'test', 'f', '33', 'hg');
SELECT * FROM v_emp_dept;


四、模式触发?/span>
可以在模式对象的操作上徏立的触发器,?CREATE、ALTER、DROP、GRANT、REVOKE ?TRUNCATE {DDL语句?br /> [BEFORE | AFTER] trigger_event ON [schema.]SCHEMA
例如Q对用户所删除的所有对象进行日志记?br /> CREATE OR REPLACE TRIGGER log_drop_obj
  AFTER DROP ON SCHEMA
BEGIN
  /* 记录操作cd、操作对象、操作时?*/
  INSERT INTO dropped_obj VALUES(ORA_DICT_OBJ_NAME, ORA_DICT_TYPE, SYSDATE);
END;

CREATE TABLE for_drop(x char);
DROP TABLE for_drop;

SELECT * FROM dropped_obj;



五、数据库U触发器
可以创徏在数据库事g上的触发器,包括启动、关闭、服务器错误、登录和注销{。这些事仉是实例范围内的,不与特定的表或视囑օ联?br />
CREATE OR REPLACE TRIGGER system_startup
  AFTER STARTUP ON DATABASE
BEGIN
  ...
END;






]]>
Oracle W记Q八Q、PL/SQL 高应用Q游标、存储过E、函数、程序包Q?/title><link>http://www.tkk7.com/kiant/articles/236591.html</link><dc:creator>黄小?/dc:creator><author>黄小?/author><pubDate>Sat, 25 Oct 2008 13:08:00 GMT</pubDate><guid>http://www.tkk7.com/kiant/articles/236591.html</guid><wfw:comment>http://www.tkk7.com/kiant/comments/236591.html</wfw:comment><comments>http://www.tkk7.com/kiant/articles/236591.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/kiant/comments/commentRss/236591.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kiant/services/trackbacks/236591.html</trackback:ping><description><![CDATA[<br /> <br /> <a href="#1">一、游?/a><br /> <a href="#2">二、存储过E?/a><br /> <a href="#3">三、函?/a><br />     <a href="#30">q程与函数的异同</a><br /> <a href="#4">四、程序包</a><br /> <br /> <br /> <br /> <a name='1' id='1'></a><strong><span style="font-size: 14pt;">一、游?/span></strong><br />     游标是一U?PL/SQL 控制l构Q可以对SQL语句的处理进行显式控Ӟ便于对表的数据逐条q行处理?br /> ps.当表中数据量大的时候,不徏议用游标(效率不高Q耗费资源Q,但是它能逐条取数据方法灵zR?br />     游标是记录的指针Q利用游标对zd集的更新或删除会反馈到表的记录上?br /> <br /> 游标属性:%FOUND?NOTFOUND?ROWCOUNT?ISOPEN<br /> <br /> <br /> <strong>1、显式游?/strong><br />     昑ּ游标是由用户昑ּ声明的游标。根据在游标中定义的查询Q查询返回的行集可以包含零或多行Q这些行UCؓzd集。游标将指向zd集中的当前行?br /> <br /> 昑ּ游标操纵q程Q声明、打开、从游标中获取记录、关闭?br /> <blockquote>SET SERVEROUTPUT ON;<br /> DECLARE<br />   CURSOR cur IS<br />     SELECT * FROM books;<br />   myrecord books%ROWTYPE;<br /> BEGIN<br />   OPEN cur;<br />   LOOP<br />     FETCH cur INTO books;<br />     EXIT WHEN cur%NOTFOUND;<br />     DBMS_OUTPUT.PUT_LINE(books.id || ' ' || books.name);<br />   END LOOP;<br />   CLOSE cur;<br /> END;<br /> </blockquote><br /> 1.1、带参数的显式游标:参数不需指定长度或者精度?br /> 1.2、FOR 循环游标Q采用遍历方式,自动打开、提取和关闭游标。(能否利用 %ROWCOUNT 获得游标提取的行敎ͼQ?br /> <blockquote>DECLARE<br />   /* 定义带参数游?*/<br />   CURSOR cur_para(id varchar2) IS<br />   SELECT books_name FROM books WHERE books_id = id;<br /> BGEIN<br />   /* 调用带参数游标,q以 FOR 循环方式处理 */<br />   FOR cur IN cur_para('0001') LOOP<br />     DBMS_OUTPUT.PUT_LINE(cur.books_id || ' ' || cur.books_id);<br />   END LOOP;<br /> END;<br /> </blockquote>1.3、用显C游标删除或更新记录<br /> 定义Ӟ需使用 SELECT ... FOR UPDATE 语句表示事物的锁定;<br /> 执行Ӟ需使用 WHERE CURRENT OF curXXX 子句指定游标的当前行?br /> <br />   /* 定义部分 */<br />   CURSOR cur IS<br />   SELECT name FROM deptment FOR UPDATE;<br /> ....<br />   /* 执行部分 */<br />   UPDATE deptment SET name=name || '_tt' WHERE CURRENT OF cur;<br /> <br /> <br /> <strong>2、隐式游?/strong><br /> 不需声明Q打开和关闭的游标。PL/SQL 为所有的 SQL 数据操纵语句隐式声明游标Q它是不能直接命名和控制?br /> <blockquote>BEGIN<br />   FROM cur IN (SELECT name FROM deptment) LOOP<br />     DBMS_OUTPUT.PUT_LINE(cur.books_id || ' ' || cur.books_id);<br />   END LOOP;<br /> END;<br /> </blockquote><br /> ps.<br /> 匿名块:每次执行旉需要被~译Qƈ且无法存储到数据库中Q别?PL/SQL 块也无法调用它?br /> 命名块:存储在数据库中,属于数据库对象?br /> <br /> 排错QSHOW ERRORS PROCEDURE/FUNCTION/PACKAGE obj_name;<br /> <br /> <br /> <br /> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="2" id="2"></a><strong><span style="font-size: 14pt;">二、存储过E?/span></strong><br /> <blockquote>CREATE OR REPLACE PROCEDURE test (value IN varchar2, value2 OUT NUMBER)<br />   /* 参数Q不需指定长度或精?*/<br /> IS<br />   /* 局部变量,省略 DECLARE 关键字,需有长?*/<br />   identity NUMBER;<br /> BEGIN<br />   SELECT ITEMRATE INTO identity<br />     FROM itemFile<br />     WHERE itemcode = value;<br />   IF identity < 200 THEN<br />     value2 := 200;<br />   ELSE<br />     value2 :=50;<br />   END IF;<br /> END;<br /> </blockquote><br /> ?匿名块执行过E?br /> <blockquote>DECLARE<br />   tvalue2 NUMBER;<br /> BEGIN<br />   test('i202', tvalue2);<br />   DBMS_OUTPUT.PUT_LINE('value2的gؓQ? || TO_CHAR(value2));<br /> END;<br /> </blockquote>?单独执行<br />     EXECUTE myproc('0001');<br /> <br /> <br /> <br /> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="3" id="3"></a><strong><span style="font-size: 14pt;">三、函?/span></strong><br />     函数的主要特性是它必返回一个倹{创建函数时通过 RETURN 子句指定函数q回值的数据cd?br /> 函数的一些限Ӟ<br />   ?函数只能带有 IN 参数Q不能带?IN OUT ?OUT 参数?br />   ?形式参数必须只用数据库cdQ不能?PL/SQL cd?br />   ?函数的返回类型必L数据库类型?br /> <blockquote>CREATE OR REPLACE FUNCTION item_price_rage (price NUMBER)<br />    /* 参数、指定返回类?*/<br />   RETURN varchar2<br /> AS<br />    /* 定义局部变?*/<br />   min_price NUMBER;<br />   max_price NUMBER;<br /> BEGIN<br />   SELECT MAX(ITEMRATE), MIN(ITEMRATE) INTO max_price, min_price<br />     FROM itemfile;<br />   IF price >= min_price AND price <= max_price THEN<br />     RETURN '输入的单价介于最低h与最高h之间';<br />   ELSE<br />     RETURN '出范围';<br />   END IF;<br /> END;<br /> </blockquote><br /> ?匿名块执行函?br /> <blockquote>DECLARE<br />   p NUMBER := 300;<br />   MSG varchar2(200);<br /> BEGIN<br />   MSG := item_price_range(p);<br />   DBMS_OUTPUT.PUT_LINE(MSG);<br /> END;<br /> </blockquote>?SELECT查询调用Q因为函数必Lq回|<br />     SELECT myfunction FROM dual;<br /> <br /> <br /> <br /> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="30" id="30"></a><strong><span style="font-size: 14pt;">    q程与函数的异同</span></strong><br /> <strong>q程Q?/strong><br />     作ؓ PL/SQL 语句执行Q?br />     在规范中不包?RETURN 子句Q?br />     不返回Q何|只有输入/输出参数Q结果集Q;<br />     可以包含 RETURN 语句Q但是与函数不同Q它不能用于q回倹{?br /> <strong>函数Q?/strong><br />     作ؓ表达式的一部分调用Q?br />     必须在规范中包含 RETURN 子句Q?br />     必须q回单个|<br />     必须包含臛_一?RETURN 语句?br /> <br /> <br /> <br /> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="4" id="4"></a><strong><span style="font-size: 14pt;">四、程序包</span></strong><br />     E序包是一U数据库对象Q它是对相关 PL/SQL cd、子E序、游标、异常、变量和帔R的封装?br /> E序包规范:声明cd、变量、常量、异常、游标和子程序?br /> E序包主体:用于实现在程序包规范中定义的游标、子E序?br /> <br /> <br /> <strong>4.1、程序包规范</strong><br /> 包含应用E序所需的程序包资源Q是与应用程序的接口?br /> <blockquote>CREATE OR REPLACE PACKAGE pack_me<br /> IS<br />   PROCEDURE order_proc (orno varchar2);<br />   FUNCTION order_fun (ornos varchar2) RETURN varchar2;<br /> END pack_me;<br /> </blockquote>*创徏 pack_me 包,q声明了子程?order_proc ?order_funQƈ交由E序包主体实现?br /> <br /> <br /> <strong>4.2、程序包M</strong><br /> 当程序包规范中指定了子程序和游标Ӟ必须有程序包M?br /> <blockquote>CREATE OR REPLACE PACKAGE BODY pack_me<br /> AS<br />   /* 实现定义的存储过E?*/<br />   PROCEDURE order_proc (orno varchar2) <br />   IS<br />     stst CHAR(1);<br />   BEGIN<br />     SELECT ostatus INTO stat FROM order_master<br />       WHERE orderno = orno;<br />     IF stat = 'p' THEN<br />       DBMS_OUTPUT.PUT_LINE('暂挂的订?);<br />     ELSE<br />       DBMS_OUTPUT.PUT_LINE('已完成的订单');<br />     END IF;<br />   END order_proc;<br />   /* 实现定义的函?*/<br />   FUNCTION order_fun(ornos varchar2) RETURN varchar2<br />   IS<br />     icode varchar2(5);<br />     ocode varchar2(5);<br />     qtyord NUMBER;<br />     qtydeld NUMBER;<br />   BEGIN<br />     SELECT qty_ord, qty_deld, itemcode, ordernc INTO qtyord, qtydeld, icode, ocode<br />       FROM order_detail<br />       WHERE orderno = ornos;<br />     IF qtyord < qtydeld THEN<br />       RETURN ocode;<br />     ELSE<br />       RETURN icode;<br />     END IF;<br />   END order_fun;<br /> END pack_me;<br /> </blockquote><br /> ?要执?pack_me包中?order_procq程Q输?br />     EXECUTE pack_me.order_proc('o002');<br /> <br /> ?要执行包中预定义的函?br /> <blockquote>DECLARE<br />   msg varchar2(10);<br /> BEGIN<br />   msg := pack_me.order_fun('o002');<br />   DBMS_OUTPUT.PUT_LINE('值是 ' || msg);<br /> END;<br /> </blockquote>  <br /> <strong>4.3、程序包的优?/strong><br />     E序包将相关的功能在逻辑上组l在一P模块化,信息隐藏和更好的性能?br /> ps.数据字典视图 USER_SOURCE 包含存储q程的代码文本?br /> <br /> <br /> <strong>4.4、内|程序包</strong><br /> STANDARD ?DBMS_STANDARDQ定义和扩展 PL/SQL 语言环境<br /> DBMS_LOBQ提供对 Oracle LOB 数据cdq行操作的功?br /> DBMS_LOCKQ用户定义的?br /> DBMS_OUTPUTQ处?PL/SQL 块和子程序输试信?br /> DBMS_SESSIONQ提?ALTER SESSION 命o?PL/SQL {效功能<br /> DBMS_ROWIDQ获?ROWID 的详l信?br /> DBMS_RANDOMQ提供随机数生成?br /> DBMS_SQLQ允许用户用动?SQLQ构造和执行L DML ?DDL 语句<br /> DBMS_JOBQ提交和理在数据库中执行的定时d<br /> DBMS_XMLDOMQ用 DOM 模型d XML cd的数?br /> DBMS_XMLPARSERQXML 解析Q处?XML 文档内容和结?br /> DBMS_XMLGENQ将 SQL 查询l果转换范的 XML 格式<br /> DBMS_XMLQUERYQ提供将数据转换?XML cd的功?br /> DBMS_XSLPROCESSORQ提?XSLT 功能Q{?XML 文档<br /> UTL_FILEQ用 PL/SQL E序来读写操作系l文本文?br /> <br /> <br /> <br /> <img src ="http://www.tkk7.com/kiant/aggbug/236591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kiant/" target="_blank">黄小?/a> 2008-10-25 21:08 <a href="http://www.tkk7.com/kiant/articles/236591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle W记Q七Q、PL/SQL 基础http://www.tkk7.com/kiant/articles/236268.html黄小?/dc:creator>黄小?/author>Thu, 23 Oct 2008 14:12:00 GMThttp://www.tkk7.com/kiant/articles/236268.htmlhttp://www.tkk7.com/kiant/comments/236268.htmlhttp://www.tkk7.com/kiant/articles/236268.html#Feedback0http://www.tkk7.com/kiant/comments/commentRss/236268.htmlhttp://www.tkk7.com/kiant/services/trackbacks/236268.html 一、概q、PL/SQL 块结?/a>
二、控制结构(分支、@环、控Ӟ
三、异?/a>
四、复合变量(记录Q?/a>



一、概q、PL/SQL 块结?/span>
PL/SQL 是Oracle产品?SQL 语言的扩展。PL/SQL 块共分ؓ三个部分Q声明部分、可执行部分、异帔R分?br />
DECLARE
    ...
BEGIN
    ...
EXCEPTION
    ...
END;
变量声明内容Q赋予变量适当的名U、数据类型、定义变量(标准Q记录)、控制变量范围?br /> 变量命名规则Q变量以字符开_可包含数字、下划线??Q长度范?1?0Q不区分大小写;不能使用pȝ关键字?br />
ps.?PL/SQL 常用的命令:
1、打开输出开?nbsp;           SET SERVEROUTPUT ON ;
2、利用系l包输出信息     DBMS_OUTPUT.PUT_LINE('x 的值是Q? || x);


二、控制结?br />
1、分支语?br /> a、IF 分支
IF ... THEN
    ...
ELSEIF ...THEN
    ...
ELSE
    ...
END IF;

b、CASE 分支
CASE
    WHEN ... THEN
        ...
    ELSE
        ...
END CASE;

2、@环语?br /> a、基本@环(LOOPQ?/strong>
无条件@环,为避免进入无限@环,LOOP 循环的语句必M?EXIT ?EXIT WHEN 语句?br />
LOOP
    ...
END LOOP;

b、WHILE 循环
WHILE condition LOOP
    ...
END LOOP;

c、FOR 循环
FOR counter IN [REVERSE] start..end
LOOP
    ...
END LOOP;

3、顺序控?/strong>
GOTO 语句Q无条g的将控制权{到标{指定的语句?br /> NULL 语句Q什么也不做Q只是将控制权{C一条语句,用于语句l构需要,但什么也不需要操作的情况下?br />
GOTO xxxx;
      ...
<<xxxx>>
NULL;


三、异?/span>
pȝ异常Q预定义异常Q?/strong>
EXCEPTION
    WHEN xxxx THEN
        ....

自定义异?/strong>
DECLARE
    -- 自定义异?br />     xxxxx EXCEPTION;
BEGIN
    -- 昑ּ引发异常
    RAISE xxxxx
EXCEPTION
    -- 异常处理
    WHEN xxxxx THEN
        ....
END; 


四、复合变量(记录Q?/span>
记录是由几个相关值构成的复合变量Q常用于支持 SELECT 语句的返回倹{用记录可以将一行数据ƈC个单元进行处理,而不必将每一列单独处理?br />
DECLARE
    TYPE myrecord IS RECORD(id varchar2(10), name varchar2(10));
    real_record myrecord;
BEGIN
    -- SELECT .. INTO 赋D?br />     SELECT emp_id, emp_name INTO real_record FROM emp WHERE emp_id='001';
    .....
END;

或?可以利用属性类型来引用变量或者数据库中某列的数据cd?br />
  ?声明变量 icodeQ?strong>引用表中某列
emp.id 的数据类?br />     icode emp.id%TYPE;

  ?声明变量 emp_rec 引用?/strong> emp 中所有列记录cd
    emp_rec emp%ROWTYPE;






]]>
Oracle W记Q五Q、表I间理http://www.tkk7.com/kiant/articles/235277.html黄小?/dc:creator>黄小?/author>Sun, 19 Oct 2008 03:09:00 GMThttp://www.tkk7.com/kiant/articles/235277.htmlhttp://www.tkk7.com/kiant/comments/235277.htmlhttp://www.tkk7.com/kiant/articles/235277.html#Feedback0http://www.tkk7.com/kiant/comments/commentRss/235277.htmlhttp://www.tkk7.com/kiant/services/trackbacks/235277.html
1、创建和讄表空?br />
CREATE TABLESPACE mydb2
  DATAFILE 'D:\oracle\product\10.2.0\oradata\test\MYDB4.DBF'
  SIZE 30M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED,
  'D:\oracle\product\10.2.0\oradata\test\MYDB5.DBF'
  SIZE 20M AUTOEXTEND ON NEXT 5 MAXSIZE 100M;

ALTER DATABASE DATAFILE 'D:\oracle\product\10.2.0\oradata\test\MYDB4.DBF' RESIZE 40M;

ALTER DATABASE DATAFILE 'D:\oracle\product\10.2.0\oradata\test\MYDB5.DBF'
  AUTOEXTEND ON NEXT 10M
  MAXSIZE UNLIMITED;

ps.
如果文g不存在,?DATAFILE 需?SIZEQ如果文件存在,?DATAFILE 需要指?REUSE 关键字?br />


2、更改用户默认表I间Qƈ授权

ALTER USER kiant DEFAULT TABLESPACE mydb2;

SELECT USERNAME, DEFAULT_TABLESPACE FROM dba_users;

GRANT UNLIMITED TABLESPACE, DBA TO kiant;



3、创q插入测试数?br />
CREATE TABLE k7 (a1 VARCHAR2(255));

SELECT * FROM dba_tables WHERE table_name= 'K7';

INSERT INTO  k7 SELECT sys_guid() FROM dual CONNECT BY LEVEL <=10000;

COMMIT;

SELECT * FROM k7 WHERE ROWNUM<=5;



4.1、用L数据导入导出

ALTER TABLESPACE mydb2 READ ONLY;
ho $ exp userid=kiant/love2you@test file=d:\123.dmp;

ALTER TABLESPACE mydb2 READ WRITE;
ho $ imp userid=kiant/love2you@test file=d:\123.dmp full=y ignore=y rows=n;
ho $ imp userid=kiant/love2you@test file=d:\123.dmp full=y ignore=y rows=y buffer=64000;

ps.
导入时应优先导入所有数据库l构 rows=nQ然后才导入l构和数?rows=y?br />

4.2、表I间数据导入导出

ALTER TABLESPACE mydb2 READ ONLY;
ho $ exp userid=kiant/love2you@test file=d:\124.dmp tablespaces=mydb2;

ho $ imp userid=kiant/love2you@test file=d:\124.dmp tablespaces=mydb2 full=y ignore=y rows=n;
ho $ imp userid=kiant/love2you@test file=d:\124.dmp tablespaces=mydb2 full=y ignore=y rows=y buffer=64000;


4.3、表I间q移

ALTER TABLESPACE mydb2 READ ONLY;
ho $ exp userid='sys/love2you as sysdba' file=d:\mydb2.dmp tablespaces=mydb2 transport_tablespace=y;

DROP TABLESPACE mydb2 INCLUDING CONTENTS;
ho $ imp userid='sys/love2you as sysdba' file=d:\mydb2.dmp tablespaces=mydb2 transport_tablespace=y
  datafiles=D:\oracle\product\10.2.0\oradata\test\MYDB4.DBF, D:\oracle\product\10.2.0\oradata\test\MYDB5.DBF;

ps.
a.必须?'sysdba' w䆾q接Q才能进行时间点恢复或可传输的表I间导入?br /> b.搬移表空间时Q源表空间中存放的所有数据对象的所有者在目标数据库中必须存在Q如果不存在Q则应在导入表空间之前徏立相应的用户Q然后再导入表空间?br />


参考文Ӟ
数据库迁UdU方?/a>
[推荐]UdOracle的表I间
使用Oracle ?imp ,exp 命o实现数据的导入导?/a>
Oracle利用传输表空间导出导入数据的步骤




]]>
Oracle W记Q四Q、SQL 几个要点http://www.tkk7.com/kiant/articles/234781.html黄小?/dc:creator>黄小?/author>Thu, 16 Oct 2008 15:34:00 GMThttp://www.tkk7.com/kiant/articles/234781.htmlhttp://www.tkk7.com/kiant/comments/234781.htmlhttp://www.tkk7.com/kiant/articles/234781.html#Feedback0http://www.tkk7.com/kiant/comments/commentRss/234781.htmlhttp://www.tkk7.com/kiant/services/trackbacks/234781.html阅读全文

]]>
Oracle W记Q三Q、SQL*PLUS 相关http://www.tkk7.com/kiant/articles/234324.html黄小?/dc:creator>黄小?/author>Tue, 14 Oct 2008 15:43:00 GMThttp://www.tkk7.com/kiant/articles/234324.htmlhttp://www.tkk7.com/kiant/comments/234324.htmlhttp://www.tkk7.com/kiant/articles/234324.html#Feedback0http://www.tkk7.com/kiant/comments/commentRss/234324.htmlhttp://www.tkk7.com/kiant/services/trackbacks/234324.html
1、帐L?/strong>
C:\> sqlplus "sys/love2you as sysdba"

C:\> sqlplus /nolog
SQL> CONNECT sys/love2you as sysdba


2、启动关闭实?/strong>

  ?SQL> startup
  启动实例、打开控制文g、打开数据文g

  ?SQL> startup mount
  启动实例、打开控制文g 

  ?SQL> startup nomount
  启动实例

  ?SQL> shutdown immediate
  q所有用h行完当前?SQL 语句后断开q接Qƈ关闭服务器?br />
  ?SQL> shutdown
  {待所有用h开q接后关闭服务器?br />


3、SQL*PLUS 执行计划
    Oracle 以替代变量方式只安排一个查询计划,提高语句执行效率?br />
SQL> SELECT * FROM dept WHERE deptno = &tt
Enter value for tt:10
....

SQL> SELECT * FROM dept WHERE deptno = &tt
Enter value for tt:20



]]>
Oracle W记Q二Q、安全管?/title><link>http://www.tkk7.com/kiant/articles/234102.html</link><dc:creator>黄小?/dc:creator><author>黄小?/author><pubDate>Mon, 13 Oct 2008 12:03:00 GMT</pubDate><guid>http://www.tkk7.com/kiant/articles/234102.html</guid><wfw:comment>http://www.tkk7.com/kiant/comments/234102.html</wfw:comment><comments>http://www.tkk7.com/kiant/articles/234102.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kiant/comments/commentRss/234102.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kiant/services/trackbacks/234102.html</trackback:ping><description><![CDATA[<a href="#1"></a><br /> <br /> <a href="#1"> 一、创建用?/a><br /> <a href="#2"> 二、用h?/a><br /> <a href="#3"> 三、角色机?/a><br /> <a href="#4"> 四、配|模版及资源限制</a><br /> <a href="#0"> 附录</a><br /> <br /> <br />     数据库安全的作用是控制用h否能够对数据库及其中的对象执行操作。要q接?Oracle 数据库,需要创Z个用户帐P该用户可以根据需要授予不同的操作权限?br /> <br /> <br /> <a name='1' id='1'></a><strong><span style="font-size: 14pt;"> 一、创建用?/span></strong>    CREATE/ALTER/DROP USER xxxx    [<a target="_blank" >帮助文档</a>]<br /> <br /> CREATE USER prod4<br />   IDENTIFIED BY ssss<br />   DEFAULT TABLESPACE users<br />   TEMPORARY TABLESPACE temp;<br /> <br />     删除一个用hQ会删除该用h拥有的模式对象。DROP USER prod4 CASCADE;<br /> <br /> <br /> <br /> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="2" id="2"></a><strong><span style="font-size: 14pt;"> 二、用h?/span></strong>        GRANT/REVOKE        [<a target="_blank" >帮助文档</a>]<br />     权限QprivilegeQ即执行特定cd SQL 语句的权利,若无M权限Q新创徏用户无法登?Oracle 数据库?br /> <br /> <strong> 1、系l权?/strong><br />     pȝ权限Qsystem privilegeQ允许用h行某些数据库操作?br /> <br />     GRANT CONNECT,RESOURCE,DBA TO prod4<br />       [WITH ADMIN OPTION];<br /> <br />     CONNECT,RESOURCE,DBA 三个预定义的角色装了大部分pȝ权限Q?br />     WITH ADMIN OPTION 选项?被授权的用户 也可以把该权限赋予其他用戗(U联授权QA->B、B->CQ?<br /> <br /> ps.更多的系l权限,请参考帮助文?GRANT - Table 18-1 System Privileges?br /> <br /> <br /> <strong> 2、模式对象权?/strong><br />     模式对象权限Qschema object privilegeQ允许用户对某一特定对象执行特定操作。要授予对象权限Q用户必L以下条件之一Q?br />     ?用户拥有指定对象Q?br />     ?或者用户已l拥?GRANT OPTION Q联授权)的能力?br /> <br /> sys:<br />     GRANT SELECT ON sys.test TO prod<br />       [WITH GRANT OPTION];<br /> prod:<br />     SELECT * FROM sys.test;<br /> <br /> ps.更多的模式对象权限,请参考帮助文?GRANT - Table 18-3 Object Privileges Available for Particular Objects?br /> <br /> <br /> <br /> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="3" id="3"></a><strong><span style="font-size: 14pt;"> 三、角色机?/span></strong>    CREATE/ALTER/DROP ROLE xxx        [<a target="_blank" >帮助文档</a>]<br />     角色QroleQ类g操作pȝ中的用户l,它封装了多个权限。用户可以通过角色l承权限Q从而简化权限的理与控制。推荐用基于角色授权,通过角色控制用户?br /> <br />     角色的用注意:<br />     ?角色不属于Q何模式(schemaQ。因此,创徏角色的用户可以被U除而不会对角色有所影响?br />     ?角色可以被授予其他角艌Ӏ但是角色不能授予其自nQ角色间也不能Ş成闭环。例如,当角?B 已经被授予角?A Ӟ角色 A ׃能再授予角色 B?<br /> <br />     -- 创徏角色 myrole q赋予权限,然后该角色赋予用户 prodQ承该角色Q?--<br />     CREATE ROLE myrole;<br />     GRANT SELECT ON sys.test TO myrole;<br />     GRANT SELECT ON sys.test4 TO myrole;<br />     GRANT myrole TO prod;<br /> <br /> <br /> <br /> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="4" id="4"></a><strong><span style="font-size: 14pt;">四、配|模版及资源限制</span></strong>    CREATE/ALTER/DROP PROFILE xxx<br />     每个用户都对应一套配|模版(profileQ,其中描述了用户用多U系l资源时的限Ӟ具体包括Q?<br /> <br />     ?用户能够建立的ƈ发会话(concurrent sessionQ数 <br />     ?用户会话?SQL 语句?Oracle q行一ơ调用时可用?CPU 处理旉 <br />     ?用户会话?SQL 语句?Oracle q行一ơ调用时可用的逻辑 I/OQlogical I/OQ量 <br />     ?用户会话的最大空闲时_idle timeQ?<br />     ?用户会话的最大连接时_connect timeQ?<br />     ?密码限制规则Q? <br />         多次试d均失败时对帐户加?<br />         密码q期旉Qexpiration periodQ及宽限期(grace periodQ?<br />         密码重用QreuseQ及复杂度(complexityQ限制规?<br /> <br /> <br /> <br /> <a style="width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(/CuteSoft_Client/CuteEditor/Load.ashx?type=image&file=anchor.gif);" name="0" id="0"></a><strong><span style="font-size: 14pt;">附录</span></strong><br /> 1、模式(schemaQ:模式是指用户与其拥有对象的逻辑集合?br /> <br /> 2、[转] <a target="_blank" >Oracle 查看用户权限</a><br /> <blockquote>ORACLE中数据字典视囑ֈ?大类Q用前缀区别Q分别ؓQUSERQALL ?DBAQ许多数据字典视囑֌含相似的信息?br /> <br />     ?USER_*:有关用户所拥有的对象信息,即用戯己创建的对象信息<br />     ?ALL_*Q有关用户可以访问的对象的信息,即用戯己创建的对象的信息加上其他用户创建的对象但该用户有权讉K的信?br />     ?DBA_*Q有x个数据库中对象的信息<br /> <br /> Q这里的*可以为TABLESQ?INDEXESQ?OBJECTSQ?USERS{)<br /> <br /> 1.查看所有用P<br /> select * from dba_user;<br /> select * from all_users;<br /> select * from user_users;<br /> <br /> 2.查看用户pȝ权限Q?br /> select * from dba_sys_privs;<br /> select * from all_sys_privs;<br /> select * from user_sys_privs;<br /> <br /> 3.查看用户对象权限Q?br /> select * from dba_tab_privs;<br /> select * from all_tab_privs;<br /> select * from user_tab_privs;<br /> <br /> 4.查看所有角Ԍ<br /> select * from dba_roles;<br /> <br /> 5.查看用户所拥有的角Ԍ<br /> select * from dba_role_privs;<br /> select * from user_role_privs;<br /> <br /> 6.查看当前用户的缺省表I间<br /> select username,default_tablespace from user_users;<br /> <br /> 7.查看某个角色的具体权限,如grant connect,resource,create session,create view to TEST;<br />   查看RESOURCEh那些权限Q用SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';<br /> <br /> </blockquote><br /> 3、[转] <a target="_blank" >对象权限</a><br /> <br /> <table border="1" cellpadding="0" cellspacing="0" width="100%"> <tbody> <tr> <td align="center" width="13%">模式对象/权限</td> <td align="center" width="7%">ALTER</td> <td align="center" width="8%">DELETE</td> <td align="center" width="10%">EXECUTE</td> <td align="center" width="7%">INDEX</td> <td align="center" width="8%">INSERT</td> <td align="center" width="7%">READ </td> <td align="center" width="10%">REFERENCE</td> <td align="center" width="12%">SELECT </td> <td align="center" width="18%">UPDATE</td> </tr> <tr> <td width="13%"> Directory</td> <td width="7%"> </td> <td width="8%"> </td> <td width="10%"> </td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> function</td> <td width="7%"> </td> <td width="8%"> </td> <td width="10%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> procedure</td> <td width="7%"> </td> <td width="8%"> </td> <td width="10%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> package</td> <td width="7%"> </td> <td width="8%"> </td> <td width="10%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> DB Object</td> <td width="7%"> </td> <td width="8%"> </td> <td width="10%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> Libary </td> <td width="7%"> </td> <td width="8%"> </td> <td width="10%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> Operation </td> <td width="7%"> </td> <td width="8%"> </td> <td width="10%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> Sequence</td> <td width="7%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="8%"> </td> <td width="10%"> </td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> Table </td> <td width="7%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="8%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="10%"> </td> <td width="7%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="8%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="10%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;">√</span></span></span></span></span></td> <td width="12%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="18%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> </tr> <tr> <td width="13%"> Type</td> <td width="7%"> </td> <td width="8%"> </td> <td width="10%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="8%"> </td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"> </td> <td width="18%"> </td> </tr> <tr> <td width="13%"> View </td> <td width="7%"> </td> <td width="8%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="10%"> </td> <td width="7%"> </td> <td width="8%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="7%"> </td> <td width="10%"> </td> <td width="12%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> <td width="18%"><span style="color: #20ff00;"><span style="color: red;"><span style="color: #20ff00;"><span style="color: #25962c;"><span style="color: #25962c;"> √</span></span></span></span></span></td> </tr> </tbody> </table> <br />     对象׃止一个权限,Ҏ权限ALL可以被授予或撤销。如TABLE的ALL权限包括:<br />     SELECT,INSERT,UPDATE和DELETE,q有INDEX,ALTER,和REFERENCE?br /> <br /> <br /> 4、[转] <a target="_blank" >Oracle 9i预定义的角色</a><br /> <br /> <table border="1" cellpadding="0" cellspacing="" height="296" width="1072"> <tbody> <tr> <td align="center"> 角色名称</td> <td align="center"> 说明</td> </tr> <tr> <td> CONNECT <br /> </td> <td> 数据库连接角Ԍ用于q接数据库,h创徏、数据库链接、序列、同义词、表和视图,以及修改会话的权?<br /> </td> </tr> <tr> <td> DBA <br /> </td> <td> 数据库管理员角色Q具有所有用ADMIN选项创徏的系l权限,可以系l权限授予其他用h角色 <br /> </td> </tr> <tr> <td> DELETE_CATALOG_ROLE <br /> </td> <td> 删除目录角色Q可以删除或重徏数据字典 <br /> </td> </tr> <tr> <td valign="top"> EXECUTE_CATALOG_ROLE <br /> </td> <td valign="top"> 执行目录角色Q能够执行所有系l包 <br /> </td> </tr> <tr> <td valign="top"> EXP_FULL_DATABASE <br /> </td> <td valign="top"> 能够使用导出E序执行数据库的完全和增量导?<br /> </td> </tr> <tr> <td valign="top"> IMP_FULL_DATABASE <br /> </td> <td valign="top"> 能够使用导入E序执行数据库的完全导入 <br /> </td> </tr> <tr> <td valign="top"> RESOURCE <br /> </td> <td valign="top"> 可以创徏、表、序列以及PL/SQL~程用方案对象,包括q程、程序包、触发器{?<br /> </td> </tr> <tr> <td valign="top"> SELECT_CATALOG_ROLE <br /> </td> <td valign="top"> 查询数据字典表或视图 <br /> </td> </tr> </tbody> </table> <br /> <br /> 参考文章:<br /> <a target="_blank" >Oracle Concepts 中文?(10g R2) -- W?20 章,数据库安?/a><br /> <br /> <br /> <blockquote> </blockquote> <img src ="http://www.tkk7.com/kiant/aggbug/234102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kiant/" target="_blank">黄小?/a> 2008-10-13 20:03 <a href="http://www.tkk7.com/kiant/articles/234102.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10g ?SQL Server 2005 的数据类?/title><link>http://www.tkk7.com/kiant/articles/233923.html</link><dc:creator>黄小?/dc:creator><author>黄小?/author><pubDate>Sun, 12 Oct 2008 16:29:00 GMT</pubDate><guid>http://www.tkk7.com/kiant/articles/233923.html</guid><wfw:comment>http://www.tkk7.com/kiant/comments/233923.html</wfw:comment><comments>http://www.tkk7.com/kiant/articles/233923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kiant/comments/commentRss/233923.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kiant/services/trackbacks/233923.html</trackback:ping><description><![CDATA[<br /> <br /> <a target="_blank" >Oracle 10g 数据cd</a><br /> <a target="_blank" >SQL Server 2005 的数据类?/a><br /> <br /> <br /> 附录Q?br /> <strong> 1、关?NUMBER(p,s)</strong> Q能表示的有效gؓ 1.0 x 10<sup>-130</sup> to (but not including) 1.0 x 10<sup>126</sup>?br />     pQ精度|指有效位敎ͼ从左边第一个不?的数vQ小数点和负号不计入有效位数。取D围ؓ 0 ?38 ?br />     sQ标度|数点右Ҏ有效数字位数。取D围ؓ -84 ?127 ?br />       ?s>0Q精到数点右?s 位,q四舍五入?br />       ?s<0Q精到数点左?s 位,q四舍五入?br /> 例如Q?br />     NUMBER(5,3)可以存储的数字Ş式ؓQpp.sss?br /> <br /> ps.<br />     Scale can be greater than precision, most commonly when e notation is used. When scale is greater than precision, the precision specifies the maximum number of significant digits to the right of the decimal point. For example, a column defined as NUMBER(4,5) requires a zero for the first digit after the decimal point and rounds all values past the fifth digit after the decimal point.<br />     ?s > p Ӟ例如 NUMBER(4,5) Q必Lgؓ 0.0xxxx 的数字(数点后 s-p 位加0Q?br /> <br /> CZQ?br /> <table border="0" cellpadding="2" cellspacing="2" height="168" width="713"> <tbody> <tr> <td> 定义格式</td> <td> 输入数?/td> <td> 存储状?/td> </tr> <tr> <td> NUMBER</td> <td> 123.89</td> <td> 123.89</td> </tr> <tr> <td> NUMBER(5)</td> <td> 123.89</td> <td> 124</td> </tr> <tr> <td> NUMBER(5,0)</td> <td> 123456</td> <td> ORA-01438: 值大于ؓ此列指定的允许精?/td> </tr> <tr align="left" valign="middle"> <td> </td> <td> </td> <td> </td> </tr> <tr align="left" valign="middle"> <td> NUMBER(6,2)</td> <td> 123.89</td> <td> 123.89</td> </tr> <tr align="left" valign="middle"> <td> </td> <td> 123.8951</td> <td> 123.9</td> </tr> <tr align="left" valign="middle"> <td> </td> <td> </td> <td> </td> </tr> <tr align="left" valign="middle"> <td> NUMBER(2,5)</td> <td> 0.000811</td> <td> 0.00081</td> </tr> <tr> <td valign="top"><br /> </td> <td valign="top">123.89</td> <td valign="top">ORA-01438: 值大于ؓ此列指定的允许精?/td> </tr> <tr> <td valign="top"><br /> </td> <td valign="top">1.2e-4</td> <td valign="top">0.00012</td> </tr> </tbody> </table> <br /> <img src ="http://www.tkk7.com/kiant/aggbug/233923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kiant/" target="_blank">黄小?/a> 2008-10-13 00:29 <a href="http://www.tkk7.com/kiant/articles/233923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle W记Q一Q、安装及体系l构http://www.tkk7.com/kiant/articles/232784.html黄小?/dc:creator>黄小?/author>Mon, 06 Oct 2008 14:52:00 GMThttp://www.tkk7.com/kiant/articles/232784.htmlhttp://www.tkk7.com/kiant/comments/232784.htmlhttp://www.tkk7.com/kiant/articles/232784.html#Feedback2http://www.tkk7.com/kiant/comments/commentRss/232784.htmlhttp://www.tkk7.com/kiant/services/trackbacks/232784.html
一、安?br /> 安装q程中的几个关键点:全局数据库名、系l标识符QSIDQ实例名Q、服务器参数文gQSPFILEXXX(实例?.ORAQ?br /> 监听器的配置Q?server\NETWORK\ADMIN 文g夹下的参数文Ӟlistener.oraQtnsnames.oraQ?br />

二、Oracle 体系l构

1、实?/strong>
实例是后台进E和内存l构的集合,必须启动实例才能讉K数据库中的数据,一个实例只能打开q用一个数据库?br /> 实例启动Ӟ分配一个系l全局区(SGAQƈ启动一pd的后台进E,每个后台q程执行不同的Q务?br />

2、数据库
Oracle 数据库物理上指一l操作系l文Ӟ数据文gQ,逻辑上指数据库创建后的逻辑关系?br />

3、会?/strong>
会话时用户与 Oracle 服务器的单个q接Q徏立连接时创徏Q断开q接时关闭?br /> 当一个数据库用户同时Ҏ务器产生多个q接Ӟ则ؓ该用户创建多个ƈ行会话?br />

4、内?/strong>
Oracle 内存l构包含以下两个内存区:
  pȝ全局区(SGAQ:实例启动时分配该内存区?br />   E序全局区(PGAQ:服务器进E启动时分配该内存区?br />
A、系l全局区(SGAQSystem Global Area ׃n全局区)
用来存储数据库信息,q由服务器进E共享?br /> 按作用可分ؓQ?br />
   ?׃n池(Shared PoolQ【操作共享?br /> ׃n池包?库缓存区QShared SQL & PL/SQLQ??数据字典~存?br /> a.库缓存区Q包括最q执行的 SQL 解释版本QPL/SQL q程、函数等E序单元的编译版本,方便用户׃n调用Q节省开销及提高进E速度?br /> b.数据字典~存Q把频繁用到的数据字典(表,列,索引、权限等信息Q存储到内存中,能减?SQL语句引v的性能上冲H?br />
   ?数据~冲区(Data Buffer CacheQ【记录共享?br /> 主要作用是将需要读取或者存取的数据块进行一个缓Ԍ从而减太q频J的对磁盘进行读和写的操作。所有同时上U的用户都可以共享这个区域。进E在处理一个查询时Q优先查扑ֆ存中是否有所需的数据块Q提高了d速度?br />
   ?日志~冲区(Redo Log BufferQ?br /> 该区域是所有记录数据操作的信息都存储在该缓冲中Q在适当的时机由LGWRq程他们写入到盘的日志文件中?br />
   ?大共享区QLarge PoolQ?br /> Oracle 可选特征,主要用于多线E?br />
B、程序全局区(Program Global AreaQ?br /> PGA是数据库服务器内存中为单个用戯E分配的专用的内存区域,是用戯E私有的Q不能共享?br /> 它由用户q接到数据库q创Z个会话时自动分配Q当会话l束后自动释放?br />


5、进E?/strong>
用户q程Q数据库用户hq接 Oracle 服务器时启动?br /> 服务器进E:用户建立会话q接时启用,处理一个或多个用户q程h?br /> 后台q程QOracle 实例启动时启动,提高pȝ效能和协调多用户?br />     数据写进E(DBWRQ:负责块~冲区的数据写入到磁盘中的数据文仉?br />     日志写进E(LGWRQ:重做日志缓冲区的信息写入到重做日志文g中?br />     pȝ监控QSMONQ:如果数据库遇C正常关闭的情况,比如H然断电{。那么再ơ启动数据库时SMONq程q行必要?数据修复操作?br />     q程监控QPMONQ:负责在一个Oracleq程p|时清理资源,用于恢复p|的用戯E?br />     查点q程QCKPTQ:负责在每当缓冲区中的更改怹地纪录在数据库中Ӟ更新控制文g和数据文件中的数据库状态信息,保数据库的同步?br />     归档q程QARCHQ:在每ơ日志切换时把已满的日志l进行备份归档,有归档方式和非归档方式(默认Q?br />


6、数据库逻辑l构
数据库、表I间QtablespaceQ、段QsegmentQ、区QextentQ、数据块QblockQ?br />



7、数据库物理l构
    数据文gQ用于存放所有的数据Q?.DBFQ,每个数据库有一l数据文Ӟ一个数据文件只能对应一个数据库?br />     日志文gQ记录了Ҏ据库q行的所有操作(*.LOGQ,主要用于数据库故障时恢复?
    控制文gQ记录了数据库所有文件的控制信息Q?.CTLQ?

语法查看Q?br /> C:\> sqlplus "sys/test1234 as sysdba"

SQL> DESC v$controlfile
SQL> SELECT status,name FROM v$controlfile

SQL> DESC v$datafile
SQL> SELECT file#,status,name FROM v$datafile

SQL> DESC v$logfile
SQL> SELECT member FROM v$controlfile



ps.内容参考:
Oracle.10G.数据库系l教E?中科院培训老师讲授
Oracle学习W记二,Oracle体系l构  http://www.lurenjia.net/article.asp?id=189
Oracle 9i数据库服务器的体pȝ?http://www.it-waibao.com/IToutsourcing/support/database/Oracle/catalogTreeID100_folderID520_infoID10452.html


]]>
[转] 详细讲解提高数据库查询效率的实用Ҏhttp://www.tkk7.com/kiant/articles/226717.html黄小?/dc:creator>黄小?/author>Wed, 03 Sep 2008 09:08:00 GMThttp://www.tkk7.com/kiant/articles/226717.htmlhttp://www.tkk7.com/kiant/comments/226717.htmlhttp://www.tkk7.com/kiant/articles/226717.html#Feedback0http://www.tkk7.com/kiant/comments/commentRss/226717.htmlhttp://www.tkk7.com/kiant/services/trackbacks/226717.htmlhttp://tech.c114.net/501/a267960.html


1.Ҏ询进行优化,应尽量避免全表扫描,首先应考虑?where ?order by 涉及的列上徏立烦引?



2.应尽量避免在 where 子句中对字段q行 null 值判断,否则导致引擎放弃用烦引而进行全表扫描,如:
select id from t where num is null

可以在num上设|默认?Q确保表中num列没有null|然后q样查询Q?
select id from t where num=0



3.应尽量避免在 where 子句中?=?lt;>操作W,否则引擎放弃用烦引而进行全表扫描?



4.应尽量避免在 where 子句中?or 来连接条Ӟ否则导致引擎放弃用烦引而进行全表扫描,如:
select id from t where num=10 or num=20

可以q样查询Q?
select id from t where num=10
union all
select id from t where num=20



5.in ?not in 也要慎用Q否则会D全表扫描Q如Q?
select id from t where num in(1,2,3)

对于q箋的数|能用 between ׃要用 in 了:
select id from t where num between 1 and 3



6.下面的查询也导致全表扫描:
select id from t where name like '%abc%'

若要提高效率Q可以考虑全文索?



7.如果?where 子句中用参敎ͼ也会D全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将讉K计划的选择推迟到运行时Q它必须在编译时q行选择。然而,如果在编译时建立讉K计划Q变量的D是未知的Q因而无法作为烦引选择的输入项。如下面语句进行全表扫描:
select id from t where num=@num

可以改ؓ强制查询使用索引Q?
select id from t with(index(索引?) where num=@num



8.应尽量避免在 where 子句中对字段q行表达式操作,q将D引擎攑ּ使用索引而进行全表扫描。如Q?
select id from t where num/2=100

应改?
select id from t where num=100*2



9.应尽量避免在where子句中对字段q行函数操作Q这导致引擎放弃用烦引而进行全表扫描。如Q?
select id from t where substring(name,1,3)='abc'--name以abc开头的id
select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id

应改?
select id from t where name like 'abc%'
select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'



10.不要?where 子句中的“=”左边q行函数、算术运或其他表达式运,否则pȝ可能无法正用烦引?



11.在用烦引字D作为条件时Q如果该索引是复合烦引,那么必须使用到该索引中的W一个字D作为条件时才能保证pȝ使用该烦引,否则该烦引将不会被用,q且应尽可能的让字段序与烦引顺序相一致?



12.不要写一些没有意义的查询Q如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0

q类代码不会q回Ml果集,但是会消耗系l资源的Q应Ҏq样Q?
create table #t(...)



13.很多时候用 exists 代替 in 是一个好的选择Q?
select num from a where num in(select num from b)

用下面的语句替换Q?
select num from a where exists(select 1 from b where num=a.num)



14.q不是所有烦引对查询都有效,SQL是根据表中数据来q行查询优化的,当烦引列有大量数据重复时QSQL查询可能不会d用烦引,如一表中有字DsexQmale、female几乎各一半,那么即在sex上徏了烦引也Ҏ询效率v不了作用?



15.索引q不是越多越好,索引固然可以提高相应?select 的效率,但同时也降低?insert ?update 的效率,因ؓ insert ?update 时有可能会重建烦引,所以怎样建烦引需要慎重考虑Q视具体情况而定。一个表的烦引数最好不要超q?个,若太多则应考虑一些不怋用到的列上徏的烦引是否有必要?



16.应尽可能的避免更?clustered 索引数据列,因ؓ clustered 索引数据列的序是表记录的物理存储序Q一旦该列值改变将D整个表记录的序的调_会耗费相当大的资源。若应用pȝ需要频J更?clustered 索引数据列,那么需要考虑是否应将该烦引徏?clustered 索引?



17.量使用数字型字D,若只含数g息的字段量不要设计为字W型Q这会降低查询和q接的性能Qƈ会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字W,而对于数字型而言只需要比较一ơ就够了?



18.可能的使用 varchar/nvarchar 代替 char/nchar Q因为首先变长字D存储空间小Q可以节省存储空_其次对于查询来说Q在一个相对较的字段内搜索效率显然要高些?



19.M地方都不要?select * from t Q用具体的字D列表代?#8220;*”Q不要返回用不到的Q何字Dc?



20.量使用表变量来代替临时表。如果表变量包含大量数据Q请注意索引非常有限Q只有主键烦引)?



21.避免频繁创徏和删除时表Q以减少pȝ表资源的消耗?



22.临时表ƈ不是不可使用Q适当C用它们可以某些例程更有效,例如Q当需要重复引用大型表或常用表中的某个数据集时。但是,对于一ơ性事Ӟ最好用导?



23.在新Z时表Ӟ如果一ơ性插入数据量很大Q那么可以?select into 代替 create tableQ避免造成大量 log Q以提高速度Q如果数据量不大Qؓ了缓和系l表的资源,应先create tableQ然后insert?



24.如果使用C临时表,在存储过E的最后务必将所有的临时表显式删除,?truncate table Q然?drop table Q这样可以避免系l表的较长时间锁定?



25.量避免使用游标Q因为游标的效率较差Q如果游标操作的数据过1万行Q那么就应该考虑改写?



26.使用Z游标的方法或临时表方法之前,应先LZ集的解决Ҏ来解决问题,Z集的Ҏ通常更有效?



27.与时表一P游标q不是不可用。对型数据集?FAST_FORWARD 游标通常要优于其他逐行处理ҎQ尤其是在必d用几个表才能获得所需的数据时。在l果集中包括“合计”的例E通常要比使用游标执行的速度快。如果开发时间允许,Z游标的方法和Z集的Ҏ都可以尝试一下,看哪一U方法的效果更好?



28.在所有的存储q程和触发器的开始处讄 SET NOCOUNT ON Q在l束时设|?SET NOCOUNT OFF 。无需在执行存储过E和触发器的每个语句后向客户端发?DONE_IN_PROC 消息?



29.量避免大事务操作,提高pȝq发能力?



30.量避免向客Lq回大数据量Q若数据量过大,应该考虑相应需求是否合理?


 



]]>
[转] SQL~码规范(攉) & 数据库设计经验谈(?http://www.tkk7.com/kiant/articles/226459.html黄小?/dc:creator>黄小?/author>Tue, 02 Sep 2008 10:03:00 GMThttp://www.tkk7.com/kiant/articles/226459.htmlhttp://www.tkk7.com/kiant/comments/226459.htmlhttp://www.tkk7.com/kiant/articles/226459.html#Feedback0http://www.tkk7.com/kiant/comments/commentRss/226459.htmlhttp://www.tkk7.com/kiant/services/trackbacks/226459.html 数据库设计经验谈(?
SQL~码规范(攉)   http://hi.baidu.com/rambochow/blog/item/3ebcbb3db3758903bba16743.html



1.书写格式 


   2.不等于统一使用"<>"。虽?SQLServer认ؓ"!="?<>"是等LQ都代表不等于的意义。ؓ了统一Q不{于一律?<>"表示

   3.使用表的别名, 数据库查询,必须使用表的别名?/p>

   4.SQL文对表字D|展的兼容性。在C#里用Select *Ӟ严禁通过getString(1)的Ş式得到查询结果,必须使用getString("字段?)的Ş式;使用InsertӞ必须指定插入的字D名Q严不指定字段名直接插入values  

   5.减少子查询的使用。子查询除了可读性差之外Q还在一定程度上影响了SQLq行效率Q请量减少使用子查询的使用Q用其他效率更高、可L更好的方式替代。  

   6.适当d索引以提高查询效率,适当d索引可以大幅度的提高索速度Q请参看SQLSERVER SQL性能优化pd?br />



7.Ҏ据库表操作的Ҏ要求 


8.用执行计划分析SQL性能  
   EXPLAIN PLAN是一个很好的分析SQL语句的工P它可以在不执行SQL的情况下分析语句。通过分析Q我们就可以知道SQLSERVER是怎样q接表,使用什么方式扫描表Q烦引扫描或全表扫描Q,以及使用到的索引名称Q按照从里到外,从上C的次序解d析的l果QEXPLAIN PLAN的分析结果是用羃q的格式排列的,最内部的操作将最先被解读Q如果两个操作处于同一层中Q带有最操作号的将首先被执行。目前许多第三方的工具如PLSQL Developer和TOAD{都提供了极其方便的EXPLAIN PLAN工具QPG需要将自己d的查询SQL文记入logQ然后在EXPLAIN PLAN中进行分析,量减少全表扫描Q?/fieldset>



]]>利用PowerDesigner构徏PDM的心?/title><link>http://www.tkk7.com/kiant/articles/213533.html</link><dc:creator>黄小?/dc:creator><author>黄小?/author><pubDate>Wed, 09 Jul 2008 02:10:00 GMT</pubDate><guid>http://www.tkk7.com/kiant/articles/213533.html</guid><wfw:comment>http://www.tkk7.com/kiant/comments/213533.html</wfw:comment><comments>http://www.tkk7.com/kiant/articles/213533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/kiant/comments/commentRss/213533.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/kiant/services/trackbacks/213533.html</trackback:ping><description><![CDATA[        “工欲善其事,必先利其器?#8221;通过构徏PD的物理数据模型,我们可以方便直观的对数据库进行开发和l护。而且在学习过E中Q也无疑的对数据库的设计有了更深一层的理解?nbsp;<br /> <br />         新徏q择好相应类型DBMS后我们就可以着手模型的环境配置了?br /> <br />         1、创Z务规?<span lang="EN-US">Model->Business Rules</span>)<br />         如果建立验证规则与列或域之间的联p,可以过通过业务验证规则来检查参数?br />         ps:  方式(Type)为验证(<span lang="EN-US">Validation</span><span style="font-family: 宋体;">Q和U束Q?/span><span lang="EN-US">Constraint</span><span style="font-family: 宋体;">Q类型的业务规则Q绑定于PDM对象的Rules属性,能生成相应的数据库代码?/span><br />          <br />         2、设定默认值对?<span lang="EN-US">Model->Defaults</span>)<br />         默认值其实是数据库里面的一U对象,我们可以讑֮数据库的公共默认值来化后l的操作。一般来_默认是对象有数值型默认倹{字W串型默认值和日期型默认gU?nbsp;<br /> <br />         3、设定域对象(<span lang="EN-US">Model-></span>Domain)Qƈl定默认?br />         域是PDM模型中的信息cd,在数据库里称为别名数据类型。用域可以方便的数据cd标准化。绑定了默认值对象的域,用于快速定义各表中列数据类型及默认值等属性?br /> <br />         4、设定列对象为非I?nbsp;not null<br />         利用l定默认值的域对象来讄列属性,防止代码d字段时获得NULL对象Q简化后期的工作?br /> <br /> <br />         在这里对Slash先生表达表达我的谢意Q他制作?#8220;PowerDesigner 中文教程”Ҏ帮助很大Q我获益非?br />          <img src ="http://www.tkk7.com/kiant/aggbug/213533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/kiant/" target="_blank">黄小?/a> 2008-07-09 10:10 <a href="http://www.tkk7.com/kiant/articles/213533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://pohezi.com" target="_blank">aٰƵ</a>| <a href="http://jiujiujingpin.com" target="_blank">18ͬ־videosվ</a>| <a href="http://8k4c.com" target="_blank">ĻӰѹۿַ</a>| <a href="http://ssdtsz.com" target="_blank">þòþüӰԺ</a>| <a href="http://2h6m.com" target="_blank">߹ۿɫƬƵ </a>| <a href="http://ybcin.com" target="_blank">ͼƬӰ</a>| <a href="http://thegaybdsm.com" target="_blank">Ƶ߹ۿ</a>| <a href="http://600c81.com" target="_blank">㽶Ƶ߹ۿ</a>| <a href="http://longcais.com" target="_blank">޴ɫwwwվ</a>| <a href="http://gepuw.com" target="_blank">AVĻɫ</a>| <a href="http://yinyinai155.com" target="_blank">þ޹Ƶ</a>| <a href="http://dbyssw.com" target="_blank">18ͬ־videosվ</a>| <a href="http://doctor5470.com" target="_blank">޹Ƶ߹ۿ</a>| <a href="http://228609.com" target="_blank">޾Ʒѹۿ</a>| <a href="http://0415ss.com" target="_blank">޹Ƶ߹ۿ</a>| <a href="http://huianpawn.com" target="_blank">vaһ</a>| <a href="http://4438xa48.com" target="_blank">һŷ</a>| <a href="http://sitefmns.com" target="_blank">Ʒ˿Ļ</a>| <a href="http://7x966.com" target="_blank">޳a޳wwwţţ</a>| <a href="http://3789re.com" target="_blank">˾Ʒŷ</a>| <a href="http://vip98888.com" target="_blank">jyzzjyzzѹۿ</a>| <a href="http://whdysdt.com" target="_blank">þþùƷ</a>| <a href="http://44jjy.com" target="_blank">97Ƶ</a>| <a href="http://cdlsy.com" target="_blank">ֻˬִ̼</a>| <a href="http://78555yy.com" target="_blank">պƵѿ</a>| <a href="http://gzmsijz.com" target="_blank">޹˾Ʒþþùһ </a>| <a href="http://51porn3.com" target="_blank">һѸƵ</a>| <a href="http://lookvod.com" target="_blank">ĻƵ</a>| <a href="http://shelaoban.com" target="_blank">ѾƵ߹ۿ</a>| <a href="http://cdhxfj.com" target="_blank">ֱѹۿ</a>| <a href="http://ti166.com" target="_blank">ֳִӲƵ</a>| <a href="http://sxjttxkywl.com" target="_blank">޾ƷWWWþþþþ</a>| <a href="http://426366.com" target="_blank">avһۺavһ</a>| <a href="http://pohezi.com" target="_blank">һ</a>| <a href="http://lswqn.com" target="_blank">պǧ</a>| <a href="http://nmgqsyg.com" target="_blank">뾫Ʒ123ѿ</a>| <a href="http://meinvtaotu.com" target="_blank">պƷƷƵ߹ۿ</a>| <a href="http://35xyz.com" target="_blank">ĻȫѰ</a>| <a href="http://www44wawa.com" target="_blank">Av߹ۿɫ</a>| <a href="http://zj1069.com" target="_blank">˳վۿ</a>| <a href="http://dd5566.com" target="_blank">ɫ͵͵Ů˵</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>