﻿<?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-断点-随笔分类-Oracle DBA</title><link>http://www.blogjava.net/tfzhu/category/43806.html</link><description>每天进步一点点！</description><language>zh-cn</language><lastBuildDate>Sun, 25 Jul 2010 06:09:15 GMT</lastBuildDate><pubDate>Sun, 25 Jul 2010 06:09:15 GMT</pubDate><ttl>60</ttl><item><title>recursion递归</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/24/327017.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 24 Jul 2010 08:25:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/24/327017.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/327017.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/24/327017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/327017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/327017.html</trackback:ping><description><![CDATA[<p><span style="font-size: 12pt">--递归，树状结构的存储与展示<br />
drop table article;<br />
create table article<br />
(<br />
id number primary key,<br />
count varchar2(4000),<br />
pid number,<br />
isleaf number(1), --0 代表非叶子节点，1代表叶子节点<br />
alevel number(2)<br />
);</span></p>
<p><span style="font-size: 12pt">insert into article values(1,'蚂蚁大战大象',0,0,0);<br />
insert into article values(2,'大象被打趴下',1,0,1);<br />
insert into article values(3,'蚂蚁也不好过',2,1,2);<br />
insert into article values(4,'瞎说',2,0,2);<br />
insert into article values(5,'没有瞎说',4,1,3);<br />
insert into article values(6,'怎么可能',1,0,1);<br />
insert into article values(7,'怎么没有可能',6,1,2);<br />
insert into article values(8,'可能性是很大的',6,1,2);<br />
insert into article values(9,'大象进医院了',2,0,2);<br />
insert into article values(10,'护士是蚂蚁',9,1,3);<br />
commit;</span></p>
<p><span style="font-size: 12pt">蚂蚁大战大象<br />
&nbsp;&nbsp;&nbsp; 大象被打趴下了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 蚂蚁也不好过<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 瞎说<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 没有瞎说<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大象进医院了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 护士是蚂蚁<br />
&nbsp;&nbsp;&nbsp; 怎么可能<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 怎么没有可能<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可能性是很大的<br />
&nbsp;</span></p>
<p><span style="font-size: 12pt">--用存储过程展现树状结构。<br />
create or replace procedure p(v_pid article.pid%type,v_level binary_integer) is<br />
&nbsp; cursor c is select * from article where pid = v_pid;<br />
&nbsp; v_preStr varchar2(1024) := '';<br />
begin<br />
&nbsp; for i in 0..v_level loop<br />
&nbsp;&nbsp;&nbsp; v_preStr := v_preStr || '****';<br />
&nbsp; end loop;</span></p>
<p><span style="font-size: 12pt">&nbsp; for v_article in c loop<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line(v_preStr ||v_article.cont);<br />
&nbsp;&nbsp;&nbsp; if(v_article.isleaf=0) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p(v_artile.id,v_levle +1);<br />
&nbsp;&nbsp;&nbsp; end if;<br />
&nbsp; end loop;<br />
end;</span></p>
 <img src ="http://www.blogjava.net/tfzhu/aggbug/327017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-24 16:25 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/24/327017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>trigger 触发器</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/24/327016.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 24 Jul 2010 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/24/327016.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/327016.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/24/327016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/327016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/327016.html</trackback:ping><description><![CDATA[<p><span style="font-size: 12pt">--触发器<br />
create table emp2_log<br />
(<br />
uname varchar2(20);<br />
action varchar2(10);<br />
atime date<br />
);</span></p>
<p><span style="font-size: 12pt; color: #0000ff">create or replace trigger trig <br />
&nbsp; after insert or delete or update on emp2 for each row<br />
begin<br />
&nbsp; if inserting then<br />
&nbsp;&nbsp;&nbsp;&nbsp; insert into emp2_log values (USER,'insert',sysdate); --USER关键字，用户。<br />
&nbsp; elsif updating then<br />
&nbsp;&nbsp;&nbsp;&nbsp; insert into emp2_log values (USER,'update',sysdate);<br />
&nbsp; elsif deleting then<br />
&nbsp;&nbsp;&nbsp;&nbsp; insert into emp2_log values (USER,'delete',sysdate);<br />
&nbsp; end if;<br />
end;</span></p>
<p><span style="font-size: 12pt">update emp2 set sal = sal*2 where deptno = 30;<br />
select * from emp2_log;</span></p>
<p><span style="font-size: 12pt; color: #0000ff">drop trigger trig;</span></p>
<p><span style="font-size: 12pt">--直接执行时，出现违反完整约束条件，已找到子记录。<br />
update dept set deptno = 99 where deptno = 10;</span></p>
<p><span style="font-size: 12pt">--使用下面的，把子表一起更新。<br />
<span style="color: #0000ff">create or replace trigger trig<br />
&nbsp; after update on dept for each row<br />
begin<br />
&nbsp; update emp set deptno =:NEW.deptno where deptno =:OLD.deptno;<br />
end;</span></span></p>
<p><span style="font-size: 12pt">update dept set deptno = 99 where deptno = 10;</span></p>
<p><span style="font-size: 12pt">select * from emp;<br />
rollback;</span></p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/327016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-24 16:22 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/24/327016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>function函数</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/24/327015.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 24 Jul 2010 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/24/327015.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/327015.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/24/327015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/327015.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/327015.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt">--函数<br />
<span style="color: #0000ff">create or replace function sal_tax</span><br />
&nbsp;&nbsp; (v_sal number)<br />
&nbsp;&nbsp; return number<br />
is<br />
begin<br />
&nbsp; if(v_sal &lt; 2000) then<br />
&nbsp;&nbsp;&nbsp; return 0.10;<br />
&nbsp; elsif(v_sal &lt; 2750) then<br />
&nbsp;&nbsp;&nbsp; return 0.15;<br />
&nbsp; else<br />
&nbsp;&nbsp;&nbsp; return 0.20;<br />
&nbsp; end if;<br />
end;<br />
<br />
<p><span style="color: #0000ff">数据库定义的函数money_to_chinese ，把数字转换正中文输出。</span><br />
create or replace function money_to_chinese(money in VARCHAR2)<br />
&nbsp;&nbsp; return varchar2 is<br />
&nbsp;&nbsp;&nbsp;&nbsp; c_money&nbsp;&nbsp; VARCHAR2(12);<br />
&nbsp;&nbsp;&nbsp;&nbsp; m_string VARCHAR2(60) := '分角圆拾佰仟万拾佰仟亿';<br />
&nbsp;&nbsp;&nbsp;&nbsp; n_string VARCHAR2(40) := '壹贰叁肆伍陆柒捌玖';<br />
&nbsp;&nbsp;&nbsp;&nbsp; b_string VARCHAR2(80);<br />
&nbsp;&nbsp;&nbsp;&nbsp; n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHAR;<br />
&nbsp;&nbsp;&nbsp;&nbsp; len&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp; i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp; tmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(12);<br />
&nbsp;&nbsp;&nbsp;&nbsp; is_zero&nbsp;&nbsp; BOOLEAN;<br />
&nbsp;&nbsp;&nbsp;&nbsp; z_count&nbsp;&nbsp; NUMBER(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp; l_money&nbsp;&nbsp; NUMBER;<br />
&nbsp;&nbsp;&nbsp;&nbsp; l_sign&nbsp;&nbsp;&nbsp; VARCHAR2(10);</p>
<p>&nbsp;&nbsp; BEGIN<br />
&nbsp;&nbsp;&nbsp;&nbsp; l_money := abs(money);<br />
&nbsp;&nbsp;&nbsp;&nbsp; IF money &lt; 0 THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l_sign := '负' ;<br />
&nbsp;&nbsp;&nbsp;&nbsp; ELSE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l_sign := '';<br />
&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp; tmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; := round(l_money, 2) * 100;<br />
&nbsp;&nbsp;&nbsp;&nbsp; c_money := rtrim(ltrim(to_char(tmp, '999999999999')));<br />
&nbsp;&nbsp;&nbsp;&nbsp; len&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; := length(c_money);<br />
&nbsp;&nbsp;&nbsp;&nbsp; is_zero := TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp; z_count := 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp; i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; := 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp; WHILE i &lt; len LOOP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i := i + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n := substr(c_money, i, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF n = '0' THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF len - i = 6 OR len - i = 2 OR len = i THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF is_zero THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b_string := substr(b_string, 1, length(b_string) - 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is_zero&nbsp;&nbsp; := FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF len - i = 6 THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b_string := b_string || '万';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF len - i = 2 THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b_string := b_string || '圆';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF len = i THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF (len = 1) THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b_string := '零圆整';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b_string := b_string || '整';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z_count := 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IF z_count = 0 THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b_string := b_string || '零';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is_zero&nbsp;&nbsp; := TRUE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z_count := z_count + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ELSE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b_string := b_string || substr(n_string, to_number(n), 1) ||<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; substr(m_string, len - i + 1, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; z_count&nbsp;&nbsp; := 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is_zero&nbsp;&nbsp; := FALSE;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; END IF;<br />
&nbsp;&nbsp;&nbsp;&nbsp; END LOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp; b_string := l_sign || b_string ;<br />
&nbsp;&nbsp;&nbsp;&nbsp; RETURN b_string;<br />
exception<br />
&nbsp;&nbsp; --异常处理<br />
&nbsp;&nbsp;&nbsp; WHEN OTHERS THEN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETURN(SQLERRM);<br />
END;</p>
</span>
<img src ="http://www.blogjava.net/tfzhu/aggbug/327015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-24 16:19 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/24/327015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>procedure存储过程</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/24/327014.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 24 Jul 2010 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/24/327014.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/327014.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/24/327014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/327014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/327014.html</trackback:ping><description><![CDATA[<p><span style="font-size: 12pt">--创建存储过程：<br />
<span style="color: #0000ff">create or replace procedure p<br />
is <br />
&nbsp; cursor c is<br />
&nbsp; select * from emp2 for update;<br />
begin<br />
&nbsp; for v_temp in c loop&nbsp; <br />
&nbsp;&nbsp;&nbsp; if(v_temp.deptno = 10) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update emp2 set sal = sal+10 where current of c;<br />
&nbsp;&nbsp;&nbsp; elsif(v_temp.deptno = 20) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update emp2 set sal = sal+20 where current of c;<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update emp2 set sal = sal+50 where current of c;<br />
&nbsp;&nbsp;&nbsp; end if;<br />
&nbsp; end loop;<br />
&nbsp; commit;<br />
end;</span></span></p>
<p><span style="font-size: 12pt">--执行：<br />
exec p;</span></p>
<p><span style="font-size: 12pt">begin<br />
p;<br />
end;<br />
</span></p>
<p><span style="font-size: 12pt"><br />
<span style="color: #0000ff">--带参数的存储过程，in传入参数，默认为传入，out传出。</span><br />
create or replace procedure p<br />
&nbsp;&nbsp; (v_a in number,v_b number,v_ret out number,v_temp in out number)<br />
is<br />
begin<br />
&nbsp; if(v_a &gt;v_b) then<br />
&nbsp;&nbsp;&nbsp; v_ret := v_a;<br />
&nbsp; else<br />
&nbsp;&nbsp;&nbsp; v_ret := v_b;<br />
&nbsp; end if;<br />
&nbsp; v_temp :=v_temp +1;<br />
end;</span></p>
<p><span style="font-size: 12pt">declare<br />
&nbsp; v_a number := 3;<br />
&nbsp; v_b number := 4;<br />
&nbsp; v_ret number;<br />
&nbsp; v_temp number := 5;<br />
begin<br />
&nbsp; p(v_a,v_b,v_ret,v_temp);<br />
&nbsp; dbms_output.put_line(v_ret);<br />
&nbsp; dbms_output.put_line(v_temp);<br />
end;</span></p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/327014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-24 16:17 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/24/327014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cursor游标</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/24/327013.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 24 Jul 2010 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/24/327013.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/327013.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/24/327013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/327013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/327013.html</trackback:ping><description><![CDATA[<p><span style="font-family: Times New Roman"><span style="font-size: 14pt"><span style="font-size: 12pt">--游标<br />
</span></span></span><span style="font-family: Times New Roman"><span style="font-size: 14pt"><span style="font-size: 12pt">declare<br />
&nbsp; cursor c is<br />
&nbsp;&nbsp;&nbsp; select * from emp;<br />
&nbsp; v_emp c%rowtype;<br />
begin<br />
&nbsp; open c;<br />
&nbsp; loop<br />
&nbsp;&nbsp;&nbsp; fetch c into v_emp;<br />
&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">exit when(c%notfound);<br />
</span>&nbsp;&nbsp;&nbsp; dbms_output.put_line(v_emp.ename);<br />
&nbsp; end loop;<br />
&nbsp; close c;<br />
end;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 14pt"><span style="font-size: 12pt">declare<br />
&nbsp; cursor c is<br />
&nbsp;&nbsp;&nbsp; select * from emp;<br />
&nbsp; v_emp emp%rowtype;<br />
begin<br />
&nbsp; open c;<br />
&nbsp; fetch c into v_emp;<br />
&nbsp;&nbsp;&nbsp; <span style="color: #0000ff"><span style="color: #0000ff">while(c%found) loop<br />
</span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dbms_output.put_line(v_emp.ename);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetch c into v_emp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --fetch c into v_emp; 导致第一条没有打印，最后一条打印2遍。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --dbms_output.put_line(v_emp.ename);<br />
&nbsp; end loop;<br />
&nbsp; close c;<br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 14pt"><span style="font-size: 12pt">declare<br />
&nbsp; cursor c is<br />
&nbsp;&nbsp;&nbsp; select * from emp;<br />
begin<br />
&nbsp;<span style="color: #0000ff">&nbsp;for v_emp in c loop</span><br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line(v_emp.ename);<br />
&nbsp; end loop;<br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 14pt"><span style="font-size: 12pt">--带参数的游标<br />
<span style="color: #0000ff">declare<br />
&nbsp; cursor c(v_deptno emp.deptno%type,v_job emp.job%type)<br />
&nbsp; is<br />
&nbsp;&nbsp;&nbsp; select ename,sal from emp where deptno =v_deptno and job= v_job;<br />
&nbsp;&nbsp;&nbsp; --v_temp c%rowtype;<br />
begin<br />
&nbsp; for v_temp in c(30,'CLERK') loop&nbsp; --for自动打开游标。<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line(v_temp.ename);<br />
&nbsp; end loop;<br />
end;</span></span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 14pt"><span style="font-size: 12pt">--可更新的游标<br />
declare<br />
&nbsp; cursor c<br />
&nbsp; is<br />
&nbsp;&nbsp;&nbsp; <span style="color: #0000ff">select * from emp2 for update;</span><br />
&nbsp;&nbsp;&nbsp; --v_temp c%rowtype;<br />
begin<br />
&nbsp; for v_temp in c loop&nbsp; <br />
&nbsp;&nbsp;&nbsp; if(v_temp.sal &lt;2000) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update emp2 set sal = sal*2 where current of c;<br />
&nbsp;&nbsp;&nbsp; elsif(v_temp.sal = 5000) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delete from emp2 where current of c;<br />
&nbsp;&nbsp;&nbsp; end if;<br />
&nbsp; end loop;<br />
&nbsp; commit;<br />
end;<br />
</span></span></span></p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/327013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-24 16:14 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/24/327013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PL/SQL语句</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/24/327012.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 24 Jul 2010 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/24/327012.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/327012.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/24/327012.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/327012.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/327012.html</trackback:ping><description><![CDATA[<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">PLSql是SQL的补充，PL过程语言procedure language，SQL：Structured Query Language。<br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">PLSql&nbsp;&nbsp;&nbsp;&nbsp;</span></span></span>带有分支、循环的语言，SQL没有分支、循环的语言。</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">set serveroutput on;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">-- 简单的PL/SQL语句块</span></span></span></span><br />
declare<br />
&nbsp;v_name varchar2(20);<br />
begin <br />
&nbsp; v_name :='myname';<br />
&nbsp; dbms_output.put_line(v_name);<br />
end;<br />
/</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--语句块的组成<br />
declare<br />
&nbsp;v_num number := 0 ;<br />
begin <br />
&nbsp; v_num := 2/v_num;<br />
&nbsp; dbms_output.put_line(v_num);<br />
<span style="color: #008000">exception<br />
&nbsp; when others then <br />
&nbsp;&nbsp;&nbsp;&nbsp; dbms_output.put_line('error');</span><br />
end;<br />
/</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--变量声明的规则<br />
1、变量名不能够使用保留字，如from、select等<br />
2、第一个字符必须是字母<br />
3、变量名最多包含30个字符<br />
4、不要与数据库的表或者列同名<br />
5、每一行只能声明一个变量</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--常用变量类型<br />
1、binary_integer：整数，主要用来计数而不是用来表示字段类型<br />
2、number：数字类型<br />
3、char：定长字符串<br />
4、varchar2：变长字符串<br />
5、date：日期<br />
6、long：长字符串，最长2GB<br />
7、boolean：布尔类型，可以取值true、false和null值</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--变量声明</span></span></span></span><br />
declare<br />
&nbsp; v_temp number(1);<br />
&nbsp; v_count binary_integer :=0;<br />
&nbsp; v_sal number(7,2):= 4000.00;<br />
&nbsp; v_date date:= sysdate;<br />
&nbsp; v_pi constant number(3,2) := 3.14;&nbsp; --constant相当java的final常量<br />
&nbsp; v_valid boolean := false;<br />
&nbsp; v_name varchar2(20) not null :='MyName';<br />
begin<br />
&nbsp; dbms_output.put_line('v_temp value:'|| v_temp);<br />
end;<br />
&nbsp;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #008000"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--变量声明，使用%type属性<br />
</span></span></span></span>declare<br />
&nbsp; v_empno number(4);<br />
&nbsp; v_empno2 emp.empno%type;<br />
&nbsp; v_empno3 v_empno2%type;<br />
begin<br />
&nbsp; dbms_output.put_line('Test');<br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--简单变量赋值<br />
declare<br />
&nbsp; v_name varchar2(20);<br />
&nbsp; v_sal number(7,2);<br />
&nbsp; v_sal2 number(7,2);<br />
&nbsp; v_valid boolean :=false;<br />
&nbsp; v_date date;<br />
begin<br />
&nbsp; va_name :='MyName';<br />
&nbsp; v_sal :=23.77;<br />
&nbsp; v_sal2 :=23.77;<br />
&nbsp; v_valid:=(v_sal = v_sal2);<br />
&nbsp; v_date:=to_date('1999-08-12 12:23:38','YYYY-MM-DD HH24:MI:SS');&nbsp;&nbsp; <br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="background-color: yellow"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt; color: #0000ff; background-color: #ffffff">--Table变量类型，定义一种新的类型，是数组。</span></span></span></span><br />
declare<br />
&nbsp; type type_table_emp_empno is table of emp.empno%type index by binary_integer;<br />
&nbsp; v_empno type_table_emp_empno;<br />
begin<br />
&nbsp; v_empnos(0) := 7369;<br />
&nbsp; v_empnos(2) := 7839;<br />
&nbsp; v_empnos(-1) := 9999;<br />
&nbsp; dbms_output.put_line(v_empnos(-1));<br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--Record变量类型,类似java的类的概念。</span></span></span></span><br />
declare<br />
&nbsp; type type_record_dept is record<br />
&nbsp; (<br />
&nbsp;&nbsp;&nbsp; deptno dept.deptno%type,<br />
&nbsp;&nbsp;&nbsp; dname dept.dname%type,<br />
&nbsp;&nbsp;&nbsp; loc dept.loc%type<br />
&nbsp; );<br />
&nbsp; v_tmp type_record_dept;<br />
begin <br />
&nbsp; v_tmp.deptno := 50;<br />
&nbsp; v_tmp.dname := 'aaaa';<br />
&nbsp; v_tmp.loc := 'bj';<br />
&nbsp; dbms_output.put_line(v_temp.deptno||''||v_temp.dname);<br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--使用%rowtype声明Record变量<br />
</span></span></span></span>declare<br />
&nbsp; v_temp dept%rowtype;<br />
begin<br />
&nbsp; v_tmp.deptno := 50;<br />
&nbsp; v_tmp.dname := 'aaaa';<br />
&nbsp; v_tmp.loc := 'bj';<br />
&nbsp; dbms_output.put_line(v_temp.deptno||''||v_temp.dname);<br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--SQL语句的运用，返回数据有且只有一条记录。<br />
</span></span></span></span>declare<br />
&nbsp; v_ename emp.ename%type;<br />
&nbsp; v_sal emp.sal%type;<br />
begin<br />
&nbsp; select ename,sal into v_ename,v_sal from emp where empno = 7369;<br />
&nbsp; dbms_output.put_line(v_ename||''||v_sal);<br />
end;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">declare<br />
&nbsp; v_emp emp%rowtype;<br />
begin<br />
&nbsp; select * into v_emp from emp where empno = 7369;<br />
&nbsp; dbms_output.put_line(v_emp.ename);<br />
end;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">declare<br />
&nbsp;&nbsp; v_deptno dept.deptno%type := 50;<br />
&nbsp;&nbsp; v_dname dept.dname%type := 'aaaa';<br />
&nbsp;&nbsp; v_loc dept.loc%type := 'bj';<br />
begin <br />
&nbsp; insert into dept2 values (v_deptno,v_dname,v_loc);<br />
&nbsp; commit;<br />
end;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">declare<br />
&nbsp; v_deptno emp2.deptno%type := 10;<br />
&nbsp; v_count number ;<br />
begin<br />
&nbsp; --update emp2 set sal = sal/2 where deptno = v_deptno;<br />
&nbsp; --select deptno into v_deptno from emp2 where empno = 7369;<br />
&nbsp; select count(*) into v_count from emp2;<br />
&nbsp; dbms_output.put_line(sql%rowcount||'条记录被影响');<br />
&nbsp; commit;<br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">DDL语句：<br />
begin<br />
&nbsp; execute immediate 'create table T(nnn varchar2(20) default ''aaa'')';<br />
end;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--if语句：取出7369的薪水，如果&lt;1200，则输出'low'，如果&lt;2000则输出'middle'，否则'high'<br />
declare<br />
&nbsp; v_sal emp.sal%type;<br />
begin<br />
&nbsp; select sal into v_sal from emp where empno = 7369;<br />
&nbsp; if(v_sal &lt; 1200) then<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line('low');<br />
&nbsp; <span style="color: #0000ff">elsif</span>(v_sal &lt; 2000) then<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line('middle');<br />
&nbsp; else<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line('high');<br />
&nbsp; end if;<br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--循环</span></span></span></span><br />
declare<br />
&nbsp; i binary_integer := 1;<br />
begin<br />
&nbsp; loop<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line(i);<br />
&nbsp;&nbsp;&nbsp; i := i+ 1;<br />
&nbsp;&nbsp;&nbsp; exit when (i &gt;= 11);<br />
&nbsp; end loop;<br />
end;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">declare<br />
&nbsp; j binary_integer := 1;<br />
begin<br />
<span style="background-color: #ffff00">&nbsp;&nbsp;while j&lt; 11 loop<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line(j);<br />
&nbsp;&nbsp;&nbsp; j := j+ 1;<br />
&nbsp; end loop;<br />
</span>end;</span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="background-color: #ffff00">begin<br />
&nbsp; for k in 1..10 loop<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line(k);<br />
&nbsp; end loop;</span></span></span></span></p>
<p><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="background-color: #ffff00">&nbsp; for k in reverse 1..10 loop<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line(k);<br />
&nbsp; end loop;<br />
end;</span></span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">--错误处理</span></span></span></span><br />
declare<br />
&nbsp; v_temp number(4);<br />
begin<br />
&nbsp; select empno into v_temp from emp where deptno = 10;<br />
<span style="color: #008000; background-color: #ffff00">exception<br />
&nbsp; when too_many_rows then<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line('太多记录了');<br />
&nbsp; when others then<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line('error');<br />
</span>end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">declare<br />
&nbsp; v_temp number(4);<br />
begin<br />
&nbsp; select empno into v_temp from emp where empno = 2222;<br />
<span style="color: #008000; background-color: #ffff00">exception<br />
&nbsp; when no_data_found then<br />
&nbsp;&nbsp;&nbsp; dbms_output.put_line('没数据');</span><br />
end;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">create table errorlog<br />
(<br />
id number primary key,<br />
errcode number,<br />
errmsg varchar2(1024),<br />
errdate date<br />
);</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt; color: #008000">create sequence seq_errorlog_id start with 1 increment by 1;</span></span></span></p>
<p><br />
<span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="background-color: yellow"><span style="font-family: Times New Roman"><span style="font-size: 10pt"><span style="font-size: 12pt">declare<br />
&nbsp; v_deptno dept.deptno%type := 10;<br />
&nbsp; v_errmsg varchar2(1024);<br />
begin<br />
&nbsp; delete from dept where deptno = v_deptno;<br />
&nbsp; commit;<br />
exception<br />
&nbsp; when others then<br />
&nbsp; rollback;<br />
&nbsp; v_errcode := SQLCODE;&nbsp; --关键字，代表出错的代码。<br />
&nbsp; v_errmsg := SQLERRM;<br />
&nbsp; insert into errorlog values (seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate);<br />
&nbsp; commit;<br />
end;</span></span></span></span><br />
</span></span></span></p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/327012.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-24 16:03 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/24/327012.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计准则（第一、第二、第三范式说明）</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/18/326435.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sun, 18 Jul 2010 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/18/326435.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/326435.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/18/326435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/326435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/326435.html</trackback:ping><description><![CDATA[<p><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">构造数据库必须遵循一定的规则。在关系数据库中，这种规则就是范式。</span></span></span></span></span>关系数据库中的关系必须满</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">足一定的要求，即满足不同的范式。目前关系数据库有六种范式：第一范式（1NF）、第二范式（2NF</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">）、第三范式（3NF）、第四范式（4NF）、第五范式（5NF）和第六范式（6NF）。满足最低要求的范</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">式是第一范式（1NF）。在第一范式的基础上进一步满足更多要求的称为第二范式（2NF），其余范式</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">以次类推。一般说来，数据库只需满足第三范式（3NF）就行了。</span></span></span></span></p>
<p><br />
<span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">第一范式（1NF）：无重复的列。</span></span></span></span></span><br />
&nbsp;&nbsp;&nbsp; 所谓第一范式（1NF）是指数据库表的每一列都是不可分割的基本数据项，同一列中不能有多个</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">值，即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性，就可能需要定</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">义一个新的实体，新的实体由重复的属性构成，新实体与原实体之间为一对多关系。在第一范式（1NF</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">）中表的每一行只包含一个实例的信息。简而言之，第一范式就是无重复的列。<br />
&nbsp;&nbsp;&nbsp; <br />
</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">&nbsp;&nbsp; 数据库表中的字段都是单一属性的，不可再分。这个单一属性由基本类型构成，包括整型、实数、字</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">符型、逻辑型、日期型等。</span></span></span></span></p>
<p><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">说明：在任何一个关系数据库中，第一范式（1NF）是对关系模式的基本要求，不满足第一范式（1NF</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">）的数据库就不是关系数据库。 </span></span></span></span></p>
<p><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">&nbsp;</span></span></span></span></p>
<p><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">第二范式（2NF）：属性完全依赖于主键[消除部分子函数依赖]。<br />
</span></span></span></span></span>&nbsp;<br />
&nbsp;&nbsp;&nbsp; 第二范式（2NF）是在第一范式（1NF）的基础上建立起来的，即满足第二范式（2NF）必须先满</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">足第一范式（1NF）。第二范式（2NF）要求数据库表中的每个实例或行必须可以被惟一地区分。为实</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">现区分通常需要为表加上一个列，以存储各个实例的惟一标识。例如员工信息表中加上了员工编号</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">（emp_id）列，因为每个员工的员工编号是惟一的，因此每个员工可以被惟一区分。这个惟一属性列</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">被称为主关键字或主键、主码。 <br />
&nbsp;&nbsp;&nbsp; 第二范式（2NF）要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">关键字一部分的属性，如果存在，那么这个属性和主关键字的这一部分应该分离出来形成一个新的实</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">体，新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列，以存储各个实例的</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">惟一标识。简而言之，第二范式就是属性完全依赖于主键。 </span></span></span></span></p>
<p><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"></span></span></span></p>
<p><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt"><span style="color: #0000ff"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">第三范式（3NF）：属性不依赖于其它非主属性[消除传递依赖]。</span></span></span></span></span><br />
&nbsp;&nbsp;&nbsp; <br />
</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp; 满足第三范式（3NF）必须先满足第二范式（2NF）。简而言之，第三范式（3NF）要求一</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">个数据库表中不包含已在其它表中已包含的非主关键字信息。例如，存在一个部门信息表，其中每个</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">部门有部门编号（dept_id）、部门名称、部门简介等信息。那么在的员工信息表中列出部门编号后就</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表，则</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">根据第三范式（3NF）也应该构建它，否则就会有大量的数据冗余。简而言之，第三范式就是属性不依</span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">赖于其它非主属性。<br />
&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></span><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"><span style="font-size: 12pt">所谓传递函数依赖，指的是如果存在"A &#8594; B &#8594; C"的决定关系，则C传递函数依赖于A。</span></span></span></span></p>
<p><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="font-size: 10pt"></span></span></span></p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/326435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-18 10:23 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/18/326435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sequence序列</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/17/326424.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 17 Jul 2010 14:08:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/17/326424.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/326424.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/17/326424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/326424.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/326424.html</trackback:ping><description><![CDATA[<p>序列：sequence，产生一个独一无二的序列，是oracle特有的。</p>
<p>create table article<br />
(<br />
id number,<br />
title varchar2(1024),<br />
cont long<br />
);<br />
insert into article values(seq.nextval,'a','b');<br />
<br />
<span style="color: #0000ff">select * from user_sequences; --查询序列<br />
</span><br />
<span style="color: #008000">create sequence seq; --创建序列seq对象<br />
select seq.nextval from dual;<br />
drop sequence seq;</span><br />
</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/326424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-17 22:08 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/17/326424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>View视图</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/17/326373.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 17 Jul 2010 03:03:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/17/326373.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/326373.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/17/326373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/326373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/326373.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff; font-family: 宋体">视图：一个虚表，也是一个子查询，是存储在数据字典里的一条select语句。 <br />
视图：基于一个表或多个表或视图的逻辑表，本身不包含数据，通过它可以对表里面的数据进行查询和修改，视图基于的表称为基表。</span></p>
<p><br />
<span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-size: 12pt">视图的优点：<br />
1、对数据库的访问，可以有选择性的选取数据库里的一部分信息，<span style="color: #0000ff">整张表的信息不对外开放</span>。2.用户通过简单的查询可以从复杂查询中得到结果。<br />
视图的缺点：<br />
如果一个表的结构改了，相应的视图如果用到了该表的字段，也要进行修改，<span style="color: #0000ff">增加维护工作量</span>。</span></span></span></p>
<p><br />
<span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-size: 12pt">简单视图：<span style="color: #0000ff">只从单表里获取数据，不包含函数和数据组，可以实现DML操作。</span><br />
复杂视图：从多表获取数据，包含函数和数据组，<span style="color: #0000ff"><span style="font-family: 宋体"><span style="font-size: 10pt"><span style="font-size: 12pt">不可以DML操作。<br />
</span></span></span></span></span></span></span><br />
<span style="font-family: 宋体">视图的创建：</span><br />
<span style="color: #008000">CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name<br />
[(alias[, alias]...)]<br />
AS subquery<br />
[WITH CHECK OPTION [CONSTRAINT constraint]] <br />
[WITH READ ONLY] </span><br />
其中：<br />
<span style="font-size: 10pt; font-family: Arial"><span style="font-size: 12pt; font-family: Times New Roman"><span style="font-size: 10pt; font-family: "><span style="font-size: 12pt"><span style="font-family: Arial"><span style="font-family: Times New Roman"><span style="font-size: 12pt; font-family: ">OR REPLACE：若所创建的试图已经存在，ORACLE自动重建该视图；<br style="font-family: " />
FORCE：不管基表是否存在ORACLE都会自动创建该视图；<br style="font-family: " />
NOFORCE：只有基表都存在ORACLE才会创建该视图：<br style="font-family: " />
alias：为视图产生的列定义的别名；<br style="font-family: " />
subquery：一条完整的SELECT语句，可以在该语句中定义别名；<br style="font-family: " />
WITH CHECK OPTION ：插入或修改的数据行必须满足视图定义的约束；<br style="font-family: " />
WITH READ ONLY ：该视图上不能进行任何DML操作。</span></span></span></span><br />
</span><br style="font-family: " />
</span></span>例如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE OR REPLACE VIEW dept_sum_vw<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (name,minsal,maxsal,avgsal)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM&nbsp;&nbsp;&nbsp; emp e,dept d<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE e.deptno=d.deptno<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GROUP BY d.dname;<br />
查询视图：<span style="color: #008000">select * from user_views; <br />
</span>修改视图：<span style="color: #008000">通过OR REPLACE 重新创建同名视图即可。</span><br />
删除视图：<span style="color: #008000">DROP VIEW VIEW_NAME;<br />
<br />
</span>视图的定义原则：<br />
1.视图的查询可以使用复杂的SELECT语法，包括连接/分组查询和子查询；<br />
2.在没有WITH CHECK OPTION和 READ ONLY 的情况下，查询中不能使用ORDER BY 子句；<br />
3.如果没有为CHECK OPTION约束命名，系统会自动为之命名，形式为SYS_Cn;<br />
4.OR REPLACE选项可以不删除原视图便可更改其定义并重建，或重新授予对象权限。<br />
<br />
视图上的DML操作，应遵循的原则：<br />
1.简单视图可以执行DML操作；<br />
2.在视图包含GROUP 函数，GROUP BY子句，DISTINCT关键字时不能删除数据行；<br />
3.在视图不出现下列情况时可通过视图修改基表数据或插入数据：<br />
&nbsp;&nbsp; a.视图中包含GROUP 函数，GROUP BY子句，DISTINCT关键字；<br />
&nbsp;&nbsp; b.使用表达式定义的列；<br />
&nbsp;&nbsp; c .ROWNUM伪列。<br />
&nbsp; d.基表中未在视图中选择的其他列定义为非空且无默认值。</p>
<p><br />
WITH CHECK OPTION 子句限定：<br />
通过视图执行的INSERTS和UPDATES操作<span style="color: #0000ff">不能创建该视图检索不到的数据行</span>，因为它会对插入或修改的数据行执行完整性约束和数据有效性检查。<br />
例如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CREATE OR REPLACE VIEW vw_emp20<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AS SELECT * FROM emp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE deptno=20<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WITH CHECK OPTION constraint vw_emp20_ck;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 视图 已建立。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查询结果：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT empno,ename,job FROM vw_emp20;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EMPNO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOB<br />
---------------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7369&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CLERK<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7566&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JONES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MANAGER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7902&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ANALYST<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 修改：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UPDATE vw_emp20 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deptno=20<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE&nbsp;&nbsp; empno=7902;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将产生错误：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UPDATE vw_emp20 <br />
&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;&nbsp;&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ERROR 位于第一行：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ORA-01402：视图WITH CHECK OPTION 违反WHERE 子句</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/326373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-17 11:03 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/17/326373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Index索引</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/17/326371.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 17 Jul 2010 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/17/326371.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/326371.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/17/326371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/326371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/326371.html</trackback:ping><description><![CDATA[索引：--像字典里面的索引。<br />
<br />
表建立索引后在插入数据时，一要把数据写入表里，二要把该数据记入索引里面，因此查询效率高、但插入效率低。<br />
<br />
create index <span style="color: #0000ff">idx_stu_email on stu(email,class);&nbsp; </span>--组合索引，查询效率高。<br />
drop index idx_stu_email;<br />
<span style="color: #0000ff">select * from user_indexes; -- 查询索引<br />
</span>
<img src ="http://www.blogjava.net/tfzhu/aggbug/326371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-17 10:54 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/17/326371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle数据字典</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/17/326370.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 17 Jul 2010 02:52:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/17/326370.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/326370.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/17/326370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/326370.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/326370.html</trackback:ping><description><![CDATA[<span style="color: #0000ff">Oracle的数据库对象分为五种：表，视图，序列，索引和同义词。</span><br />
<br />
select * from&nbsp; user_tables&nbsp; -- 当前用户下有多少张表<br />
select * from&nbsp; user_views&nbsp; -- 当前用户下有多少张视图<br />
select * from user_sequences; --查询序列<br />
select * from user_indexes; -- 查询索引<br />
<br />
select * from&nbsp; user_constraints&nbsp; -- 当前用户下有多少约束<br />
select * from&nbsp; dictionary&nbsp; --数据字典表的表<br />
<img src ="http://www.blogjava.net/tfzhu/aggbug/326370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-17 10:52 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/17/326370.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DDL（data definition language）介绍</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/17/326365.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sat, 17 Jul 2010 01:43:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/17/326365.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/326365.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/17/326365.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/326365.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/326365.html</trackback:ping><description><![CDATA[<p><span style="font-size: 12pt; font-family: 宋体">DDL（data definition language）：DDL比DML要多，主要的命令有<span style="color: #0000ff">CREATE、ALTER、DROP</span>等，DDL主要是用在定义或改变表（TABLE）的结构，数据类型，表之间的链接和约束等初始化工作上，他们大多在建立表时使用。<br />
<br />
数据类型：VARCHAR2(50)最大4K(4096字节)、CHAR(1)最大2k、NUMBER(10,6)、NUMBER(6)、DATE、<br />
LONG 变长字符串，最大长度达2G。</span></p>
<p>&nbsp;</p>
<p><span style="color: #0000ff">约束条件有5个：非空、唯一、主键、外键、check。<br />
</span><br />
create table stu<br />
(<br />
id number(6), --primary key<br />
name varchar2(20) constraint stu_name_nn not null, --stu_name_nn别名<br />
sex number(1),<br />
age number(3),<br />
sdate date,<br />
grade number(2) default 1,<br />
class number(4), --references class(id)<br />
email varchar2(50),<br />
--email varchar2(50) unique&nbsp; --字段级约束，不能有重复值<br />
<span style="color: #0000ff">constraint stu_name_email_uni <span style="color: #008000">unique(name,email), </span>--表级约束<br />
constraint stu_id_pk <span style="color: #008000">primary key(id),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>--表级约束<br />
constraint stu_class_fk<span style="color: #008000">&nbsp;foreign key(class) references class(id)</span> --被参考字段必须是主键<br />
</span>);</p>
<p>create table class<br />
(<br />
id number(4) <span style="color: #008000">primary key,<br />
</span>name varchar2(20) not null<br />
)</p>
<p><br />
alter table stu add(addr varchar2(100)); --对已存在的表新增字段<br />
alter table stu modify(addr varchar2(150)); --对字段修改<br />
alter table stu drop (addr); --删除一个字段<br />
alter table stu drop constraint stu_class_fk;<br />
delete from class;<br />
drop table class;</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/326365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-17 09:43 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/17/326365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DML（data manipulation language）介绍</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/11/325782.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sun, 11 Jul 2010 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/11/325782.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/325782.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/11/325782.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/325782.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/325782.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff">SQL语言共分为四大类：数据查询语言DQL，数据操纵语言DML，数据定义语言DDL，数据控制语言DCL。</span></p>
<p>DML（data manipulation language）：它们是SELECT、UPDATE、INSERT、DELETE，就象它的名字一样，这4条命令是用来对数据库里的数据进行操作的语言。</p>
<p>conn sys/sys as sysdba;<br />
drop user pcisv6 cascade;<br />
exp --备份scott用户下的表<br />
--创建用户,identified为认证相当是密码，quota配额就是分配空间。<br />
<span style="color: #0000ff">create user pcisv6 identified by 11 default tablespace core6 quota 10M on corev6</span><br />
<span style="color: #0000ff">grant create session,create table,create view to pcisv6;</span>&nbsp;&nbsp; --授权，session是用于登录的<br />
imp --导入scott用户下的表<br />
<br />
SELECT：<br />
<span style="color: #0000ff">select rownum r,ename from emp;&nbsp;&nbsp;&nbsp; --rownum行数，目前只能使用&lt;、&lt;=, 而没有直接&gt;、=的写法。<br />
</span>select ename, sal&nbsp;&nbsp;&nbsp;&nbsp; --求薪水最高的前5人<br />
&nbsp;from (select ename, sal from emp order by sal desc)<br />
&nbsp;where rownum &lt;= 5;<br />
<br />
--求薪水最高的前6到10人<br />
select ename,sal,rownum r from emp order by sal desc; --r 排序混乱<br />
select ename,sal,rownum r from (select ename,sal from emp order by sal desc); --此时r序号按新表排序<br />
<span style="color: #0000ff">select ename, sal&nbsp;&nbsp;&nbsp; -- 此处为结果<br />
&nbsp; from (select ename, sal, rownum r<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from (select ename, sal from emp order by sal desc))<br />
&nbsp;where r &gt;= 6<br />
&nbsp;&nbsp; and r &lt;= 10;</span></p>
<br />
INSERT：<br />
<span style="color: #0000ff">insert into dept values(50,'game','bj');&nbsp;&nbsp;&nbsp; --整条记录</span><br />
rollback;<br />
create table dept2 as selet * from emp; --创建dept2表<br />
<span style="color: #0000ff">insert into dept2(deptno,dname) values(60,'game2');&nbsp;&nbsp;&nbsp; --有选择的字段插入</span><br />
<span style="color: #0000ff">insert into dept2 <span style="color: #0000ff">select * from dept;&nbsp;&nbsp;&nbsp; --插入一个表, 2个表结构一样</span></span> <br />
<p><br />
UPDATE：<br />
update emp2 set sal=sal*12,ename=ename||'-' where deptno=10;<br />
<br />
DELETE：<br />
delete from dept2 where deptno&lt;25;<br />
rollback;<br />
<br />
TRANSACTION：<br />
transaction 起始一条dml语句，在commit、rollback时完成。<br />
transaction 在执行dml后，在其后有执行了ddl、dcl时，事务自动提交。<br />
在正常退出exit时，事务自动提交。<br />
在非正常退出时，事务回滚。<br />
<br />
------------------------------------------------------------<br />
例子：<br />
有3个表S，C，SC <br />
S（SNO，SNAME）代表（学号，姓名） <br />
C（CNO，CNAME，CTEACHER）代表（课号，课名，教师） <br />
SC（SNO，CNO，SCGRADE）代表（学号，课号成绩） <br />
问题： <br />
1，找出没选过&#8220;黎明&#8221;老师的所有学生姓名。 <br />
2，列出2门以上（含2门）不及格学生姓名及平均成绩。 <br />
3，即学过1号课程有学过2号课所有学生的姓名。 <br />
请用标准SQL语言写出答案，方言也行（请说明是使用什么方言）。 </p>
<p>1. <br />
select sname froms<br />
&nbsp; join sc on (s.sno = sc.sno)<br />
&nbsp; join c(c.cno = sc.cno)<br />
&nbsp;where c.cteacher &lt;&gt; 'liming';<br />
2. <br />
select sname<br />
&nbsp;where sno in (select sno<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from sc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where scgrade &lt; 60<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; group by sno<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; having count(*) &gt;= 2);<br />
3. <br />
select sname<br />
&nbsp;where sno in (select sno<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from sc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where cno = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and sno in (select sno from sc where cno = 2));</p>
<br />
<img src ="http://www.blogjava.net/tfzhu/aggbug/325782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-11 15:43 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/11/325782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL组合查询例子</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/06/325409.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Tue, 06 Jul 2010 15:25:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/06/325409.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/325409.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/06/325409.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/325409.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/325409.html</trackback:ping><description><![CDATA[<p>select e1.ename,e2.ename from emp e1 join emp e2 on (e1.mgr=e2.empno); --自连接，从e2中取出e1的经理人。<br />
select ename,dname from emp e <span style="color: #0000ff">left join </span>dept d on (e.deptno=d.deptno);&nbsp;&nbsp; --左外连接<br />
select ename,dname from emp e <span style="color: #0000ff">right outer join </span>dept d on (e.deptno=d.deptno);&nbsp;&nbsp; --右外连接<br />
select ename,dname from emp e <span style="color: #0000ff">full join </span>dept d on (e.deptno=d.deptno);&nbsp;&nbsp;&nbsp; --全连接</p>
<p><br />
--求部门中哪些人的薪水最高<br />
select ename,sal from emp <br />
join (select max(sal) max_sal,deptno from emp group by deptno) t<br />
on (emp.sal = t.max_sal and emp.deptno = t.deptno); <br />
<br />
--求部门平均薪水的等级<br />
select deptno,avg_sal,grade from<br />
(select deptno,avg(sal) avg_sal from emp group by deptno) t <br />
join salgrade s on (t.avg_sal between s.losal and s.hisal);</p>
<p><br />
--求部门平均的薪水等级<br />
select avg(grade) from<br />
(select deptno,ename,grade from emp join salgrade s on (emp.sal between s.losal and s.hisal )) t <br />
group by deptno;<br />
</p>
<p>--雇员中有哪些人是经理人<br />
select ename from emp where empno in (select distinct mgr from emp);</p>
<p><br />
--不准用组函数，求薪水的最高值。采用的是自连接。<br />
select distinct sal from emp where sal not in <br />
(select distinct e1.sal from emp e1 join emp e2 on (e1.sal &lt; e2.sal));<br />
<br />
<br />
--求平均薪水最高的部门的部门编号。嵌套的组函数。<br />
select deptno,avg_sal from <br />
(select avg(sal) avg_sal,deptno from emp group by deptno)<br />
where avg_sal = <br />
(select max(avg(sal)),deptno from emp group by deptno;</p>
<p>&nbsp;</p>
<p>--求平均薪水的等级最低的部门的部门名称。<br />
select dname,t1.deptno,grade,avg_sal from <br />
&nbsp; ( <br />
&nbsp;&nbsp; select deptno,grade,avg_sal from <br />
&nbsp;&nbsp;&nbsp;&nbsp; (select deptno,avg(sal) avg_sal from emp group by deptno) t<br />
&nbsp;&nbsp;&nbsp;&nbsp; join salgrade s on (t.avg_sal between s.losal and s.hisal)<br />
&nbsp; )<br />
&nbsp;&nbsp; t1<br />
&nbsp;&nbsp; join dept on (t1.deptno = dept.deptno)<br />
)<br />
where t1.grade =<br />
(<br />
&nbsp;select min(grade) from <br />
&nbsp;&nbsp;&nbsp;&nbsp; (select deptno,grade,avg_sal from <br />
&nbsp;&nbsp;(select deptno,grade,avg(sal) avg_sal from emp group by deptno) t<br />
&nbsp;&nbsp; join salgrade s on (t.avg_sal between s.losal and s.hisal)<br />
&nbsp;&nbsp;&nbsp;&nbsp; ) <br />
)<br />
</p>
<p><br />
--求平均薪水的等级最低的部门的部门名称。采用视图。<br />
conn sys/sys as sysdba;<br />
<span style="color: #0000ff">grant create table,create view to scott;</span></p>
<p><span style="color: #0000ff">create view v$_dept_avg_sal_info as<br />
select deptno,grade,avg_sal from <br />
&nbsp;&nbsp;(select deptno,grade,avg(sal) avg_sal from emp group by deptno) t<br />
&nbsp;&nbsp; join salgrade s on (t.avg_sal between s.losal and s.hisal);</span></p>
<p>select dname,t1.deptno,grade,avg_sal from <br />
&nbsp;&nbsp; v$_dept_avg_sal_info t1<br />
&nbsp;&nbsp; join dept on (t1.deptno = dept.deptno)<br />
)<br />
where t1.grade =<br />
(<br />
&nbsp;select min(grade) from&nbsp; v$_dept_avg_sal_info<br />
)<br />
</p>
<p>-- 比普通员工的最高薪水还要高的经理人名称。<br />
select ename from emp<br />
where empno in (select distinct mgr from emp where mgr is not null)<br />
and sal &gt;<br />
(<br />
&nbsp; select max(sal) from emp where empno not in<br />
&nbsp; (select distinct mgr from emp where mgr is not null)<br />
)</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/325409.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-06 23:25 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/06/325409.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL1999表连接</title><link>http://www.blogjava.net/tfzhu/archive/2010/07/06/325408.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Tue, 06 Jul 2010 15:18:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/07/06/325408.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/325408.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/07/06/325408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/325408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/325408.html</trackback:ping><description><![CDATA[<p><span style="color: #0000ff">--1992年sql标准，连接条件和过滤条件写在一起。</span><br />
select ename,dname,grade <br />
from emp e,dept d,salgrade s <br />
where e.deptno = d.deptno and e.sal between s.losal and s.hisal and job&lt;&gt;'CLERK'; <br />
</p>
<p><span style="color: #0000ff">--1999年sql标准,连接条件和过滤条件分开</span><br />
select ename,dname,grade <br />
from emp e join dept d on (e.deptno = d.deptno)<br />
join salgrade s on (e.sal between s.losal and s.hisal)<br />
where ename not like '_A%'; <br />
</p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/325408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-07-06 23:18 <a href="http://www.blogjava.net/tfzhu/archive/2010/07/06/325408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用sql函数</title><link>http://www.blogjava.net/tfzhu/archive/2010/06/30/324932.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Wed, 30 Jun 2010 15:38:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/06/30/324932.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/324932.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/06/30/324932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/324932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/324932.html</trackback:ping><description><![CDATA[<p>select <span style="color: #0000ff">chr</span>(65) from dual;<br />
select <span style="color: #0000ff">ascii</span>('A') from dual;&nbsp; --求编码<br />
select ename from emp where <span style="color: #0000ff">lower</span>(ename) like '_a%'&nbsp; -- upper大写<br />
select <span style="color: #0000ff">round</span>(23.652,2) from dual; -- 四舍五入 23.65,round(23.652)为24<br />
select <span style="color: #0000ff">substr</span>(ename,1,3) from emp; --从第一个开始，总接取3个。<br />
select ename,sal,deptno from emp where <span style="color: #0000ff">length</span>(sal)&gt;3;<br />
<br />
select <span style="color: #0000ff">to_char</span>(sal,'$99,999.9999') from emp;&nbsp; --'L00000.0000'千位不够补0<br />
select <span style="color: #0000ff">to_char</span>(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;&nbsp;<br />
<br />
select ename,hiredate from emp where hiredate&gt;<span style="color: #0000ff">to_date</span>('1981-2-20 12:34:56','YYYY-MM-DD HH24:MI:SS');</p>
<p>select sal from emp where sal&gt;<span style="color: #0000ff">to_number</span>('$1,250.00','$9,999.99');</p>
<p>select ename,sal*12 + <span style="color: #0000ff">nvl</span>(comm,0) from emp; --对空值处理<br />
</p>
<p><br />
组函数：<br />
select <span style="color: #0000ff">max</span>(sal) from emp;<br />
select <span style="color: #0000ff">min</span>(sal) from emp;<br />
select <span style="color: #0000ff">avg</span>(sal) from emp;<br />
select <span style="color: #0000ff">sum</span>(sal) from emp;<br />
select <span style="color: #0000ff">count(*)</span> from emp; -- *求出总记录数, count(comm)求出该列不为空的值。<br />
select deptno,job,max(sal) from emp <span style="color: #0000ff">group by deptno,job</span>;&nbsp; --按照条件组合分组<br />
select ename from emp where sal =(<span style="color: #0000ff">select max(sal) from emp</span>); --子查询<br />
<br />
update Web_Bas_Edr_Rsn set c_rsn_txt=<span style="color: #0000ff">REPLACE</span>(c_rsn_txt,'天津','北京') where&nbsp; c_rsn_txt like '%天津%' --批量替换<br />
<br />
-- <span style="color: #0000ff">having对分组进行限制，where对单行限制</span><br />
select avg(sal) from emp where sal&gt;1000 group by deptno <span style="color: #0000ff">having </span>avg(sal) &gt;1500 order by avg(sal) desc; </p>
<img src ="http://www.blogjava.net/tfzhu/aggbug/324932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-06-30 23:38 <a href="http://www.blogjava.net/tfzhu/archive/2010/06/30/324932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用sql操作</title><link>http://www.blogjava.net/tfzhu/archive/2010/06/30/324837.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Tue, 29 Jun 2010 16:45:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/06/30/324837.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/324837.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/06/30/324837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/324837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/324837.html</trackback:ping><description><![CDATA[<span style="color: #0000ff">sqlplus sys/sys as sysdba;</span><br />
alert user scott account unlock;<br />
<span style="color: #0000ff">desc emp;</span><br />
select ename,sal*12 from emp;<br />
<br />
<span style="color: red"><span style="color: #0000ff">select sysdate from dual; --dual为空表</span><br />
</span><br />
select ename,sal*12 annual_sal from emp; --别名<br />
--数值+null 为null<br />
select ename||sal from emp; --拼串<br />
select ename<span style="color: #0000ff">||</span><span style="color: #0000ff">'aaa''bbb'</span> from emp; --含'的拼串,''替换为'<br />
select <span style="color: #0000ff">distinct</span> deptno,job from emp; --去掉2个字段值的组合<br />
<br />
select * from emp where deptno=10 <span style="color: #0000ff">and</span> ename='CLARK'; <br />
select ename,sal from emp where sal<span style="color: #0000ff">&gt;</span>1500;<br />
select ename,sal from emp where deptno<span style="color: #0000ff">&lt;&gt;</span>10;<br />
select ename,sal from emp where sal <span style="color: #0000ff">between</span> 800 <span style="color: #0000ff">and</span> 1500; -- sal&gt;=800 and sal&lt;=1500<br />
select ename,sal,comm from emp where comm is <span style="color: #0000ff">null</span>; --is not null<br />
select ename,sal,comm from emp where sal <span style="color: #0000ff">in</span> (800,1500); -- not in (800,1500)<br />
<br />
select ename from emp where ename <span style="color: #0000ff">like '_A%'</span> -- %为0个或多个，-为1个<br />
select ename from emp where ename <span style="color: #0000ff">like '%\%%'</span> -- 名字含有%，需要\为转义字符处理<br />
select ename from emp where ename like '%$%%' escape '$'&nbsp; -- 可以使用$作为转义字符<br />
<br />
select ename,sal,deptno from emp <span style="color: #0000ff">order by </span>deptno <span style="color: #0000ff">asc</span>,ename <span style="color: #0000ff">desc</span>;&nbsp; -- 升序asc，降序 desc<br />
<br />
<img src ="http://www.blogjava.net/tfzhu/aggbug/324837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-06-30 00:45 <a href="http://www.blogjava.net/tfzhu/archive/2010/06/30/324837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储过程-1</title><link>http://www.blogjava.net/tfzhu/archive/2010/01/31/311399.html</link><dc:creator>断点</dc:creator><author>断点</author><pubDate>Sun, 31 Jan 2010 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/tfzhu/archive/2010/01/31/311399.html</guid><wfw:comment>http://www.blogjava.net/tfzhu/comments/311399.html</wfw:comment><comments>http://www.blogjava.net/tfzhu/archive/2010/01/31/311399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tfzhu/comments/commentRss/311399.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tfzhu/services/trackbacks/311399.html</trackback:ping><description><![CDATA[<span style="color: #008000">需求：对WEB_CUS_CLENT机构为空的进行修改，通过WEB_CUS_CLENT客户编码查找投保人WEB_PLY_APPLICANT的申请单号，通过申请单号查找web_PLY_BASE查找承保机构。</span><br />
<br />
<p>CREATE OR REPLACE PROCEDURE V6.P_WEB_CUS_CLINT_DPT<br />
IS</p>
<p>--增量抽取客户信息数据<br />
v_task_start_date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
v_task_end_date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
v_sql_code&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :=0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<br />
v_sql_msg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(4000) := ''&nbsp;&nbsp;&nbsp; ; --sql错误信息<br />
V_Cus_Client&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Web_Cus_Client%rowtype&nbsp; ;<br />
V_UPD_TM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date;<br />
V_APP_NO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varchar2(50);<br />
V_DPT_CDE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varchar2(50);<br />
V_COUNT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number(4,0);</p>
<p>cursor CUR_WEB_CUS_ADD is<br />
select *<br />
from Web_Cus_Client<br />
a where a.C_DPT_CDE is null;</p>
<p>BEGIN<br />
&nbsp; SELECT SYSDATE INTO v_task_start_date FROM dual; --任务开始时间和任务结束时间<br />
&nbsp; SELECT SYSDATE INTO v_task_end_date FROM dual;<br />
&nbsp; v_sql_msg := '对WEB_CUS_CLENT机构为空的进行修改';<br />
&nbsp;<br />
&nbsp;open CUR_WEB_CUS_ADD;<br />
&nbsp;&nbsp;&nbsp;&nbsp; loop<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fetch CUR_WEB_CUS_ADD into V_Cus_Client;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exit when CUR_WEB_CUS_ADD% notfound;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v_sql_msg := V_Cus_Client.c_Clnt_Cde||'对WEB_CUS_CLENT机构为空的进行修改';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V_COUNT :=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select count(1) into V_COUNT from WEB_PLY_APPLICANT a where a.C_APP_CDE=V_Cus_Client.c_Clnt_Cde;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(V_COUNT&gt;0) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select max(T_CRT_TM) into V_UPD_TM from WEB_PLY_APPLICANT a where a.C_APP_CDE=V_Cus_Client.c_Clnt_Cde;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select max(C_APP_NO) into V_APP_NO from WEB_PLY_APPLICANT a where a.T_CRT_TM=V_UPD_TM and a.C_APP_CDE=V_Cus_Client.c_Clnt_Cde;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select C_DPT_CDE into V_DPT_CDE from web_PLY_BASE a where a.C_APP_NO=V_APP_NO;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; update WEB_CUS_CLIENT a set a.C_DPT_CDE=V_DPT_CDE where a.C_CLNT_CDE=V_Cus_Client.c_Clnt_Cde;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end if;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;commit;<br />
&nbsp;&nbsp;&nbsp;end loop;<br />
&nbsp;close CUR_WEB_CUS_ADD;</p>
<p>&nbsp;--写任务日志<br />
&nbsp; v_sql_code&nbsp;&nbsp;&nbsp; :=0;<br />
&nbsp; v_sql_msg&nbsp;&nbsp;&nbsp;&nbsp; := 'NORMAL, SUCCESSFUL COMPLETION';<br />
&nbsp; SELECT SYSDATE INTO v_task_end_date FROM dual;<br />
&nbsp;INSERT INTO LOAD_HIS_LOG<br />
&nbsp;&nbsp; (&nbsp; SYS<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,JOBNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,START_DATE<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,END_DATE<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,RUN_DATE<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,SQL_CODE<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,SQL_STATE<br />
&nbsp;&nbsp; )<br />
&nbsp; VALUES<br />
&nbsp;&nbsp;&nbsp; ('V5_MID'<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,'P_WEB_CUS_CLINT_DPT'<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,v_task_start_date<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,v_task_end_date<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,to_char((v_task_end_date - v_task_start_date) * 86400)<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,v_sql_code<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,v_sql_msg<br />
&nbsp;&nbsp;&nbsp; );<br />
&nbsp; COMMIT;</p>
<p>EXCEPTION<br />
&nbsp; WHEN OTHERS THEN<br />
&nbsp;&nbsp;&nbsp; v_sql_code := SQLCODE;<br />
&nbsp;&nbsp;&nbsp; v_sql_msg&nbsp; := v_sql_msg || ' ' || ' : ' || SQLERRM;<br />
&nbsp;&nbsp;&nbsp; SELECT SYSDATE INTO v_task_end_date FROM dual;&nbsp; --任务结束时间<br />
&nbsp;&nbsp;&nbsp; ROLLBACK;<br />
&nbsp;&nbsp;&nbsp; INSERT INTO LOAD_HIS_LOG<br />
&nbsp;&nbsp; (&nbsp; SYS<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,JOBNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,START_DATE<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,END_DATE<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,RUN_DATE<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,SQL_CODE<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,SQL_STATE<br />
&nbsp;&nbsp; )<br />
&nbsp; VALUES<br />
&nbsp;&nbsp;&nbsp; ('V5_MID'<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,'P_WEB_CUS_CLINT_DPT'<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,v_task_start_date<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,v_task_end_date<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,to_char((v_task_end_date - v_task_start_date) * 86400)<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,v_sql_code<br />
&nbsp;&nbsp;&nbsp;&nbsp; ,v_sql_msg<br />
&nbsp;&nbsp;&nbsp; );<br />
&nbsp; COMMIT;<br />
END ;<br />
</p>
 <img src ="http://www.blogjava.net/tfzhu/aggbug/311399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tfzhu/" target="_blank">断点</a> 2010-01-31 17:48 <a href="http://www.blogjava.net/tfzhu/archive/2010/01/31/311399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>