??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品yjizz视频网,欧美日韩色图,99欧美视频http://www.aygfsteel.com/kyleYang/category/42932.html孩儿立志Z养I学不成名誓不q? 风华正茂乑֝圎ͼ人生无处不青山? 光阴如同水去,珍惜时光最宝贵? 鹏程万里靠自己,飞黄腾达青少q? zh-cnThu, 12 Aug 2010 12:28:23 GMTThu, 12 Aug 2010 12:28:23 GMT60oracle中显式游标和隐式游标比较http://www.aygfsteel.com/kyleYang/archive/2010/08/10/328420.html飞熊飞熊Tue, 10 Aug 2010 07:29:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/08/10/328420.htmlhttp://www.aygfsteel.com/kyleYang/comments/328420.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/08/10/328420.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/328420.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/328420.html    在数据库中,游标是一个十分重要的概念Q游标提供了一U灵zLD,可以对表中检索出的数据进行操作。就本质而言Q游标实际上是一U能从包括多条数据记录的l果集中每次提取一条记录的机制?br />   游标q果集和结果集中指向特定记录的游标位置l成Q游标充当指针的作用。尽游标能够遍历查询结果中的所有行Q但它一ơ只能指向一行?br />   使用数据游标可以选择一l数据,可以在记录集上滚动游标,q检查游标指向的每一行数据。可以用局部变量和游标的组合来分别查每个记录,q在转移C一个记录之前,q行所需的Q何外部操作。游标的另一个常见用途是保存查询l果Q以便以后用。游标的l果集是由select语句产生Q如果处理过E需要重复用一个记录集Q那么创Zơ游标而重复用若q次Q比重复查询数据库要快得多?br />    昑ּ游标
    在大多数时候我们在设计E序的时候都遵@下面的步?
   1、打开游标
   2、开始@?br />   3、从游标中取?br />    4、检查那一行被q回
    5、处?br />    6、关闭@?br />    7、关闭游?br />但还有一U游标与q种不相同,q就是FOR循环Q用于FOR循环的游标按照正常的声明方式声明Q它的优点在于不需要显式的打开、关闭、取数据Q测试数据的存在、定义存放数据的变量{等?/font>


飞熊 2010-08-10 15:29 发表评论
]]>
Oracle Exceptionhttp://www.aygfsteel.com/kyleYang/archive/2010/08/03/327806.html飞熊飞熊Tue, 03 Aug 2010 03:32:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/08/03/327806.htmlhttp://www.aygfsteel.com/kyleYang/comments/327806.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/08/03/327806.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/327806.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/327806.html  BEGIN
    ... --语句
  EXCEPTION -- 例外处理
    WHEN ...
    ...
    WHEN OTHERS
      ...
  END;

  2) 常用预定义例?br />  EXCEPTION
    WHEN CURSOR_ALREADY_OPEN THEN -- ORA-06511 SQLCODE = -6511 游标已经打开
      ...
    WHEN DUP_VAL_ON_INDEX THEN -- ORA-00001 SQLCODE = -1 向唯一索引中插入重复数?br />      ...
    WHEN INVALID_CURSOR THEN -- ORA-01001 SQLCODE = -1001 非法游标操作
      ...
    WHEN INVALID_NUMBER THEN -- ORA-01722 SQLCODE = -1722 字符向数字{换失?br />      ...
    WHEN LOGIN_DENIED THEN -- ORA-01017 SQLCODE = -1017
      ...
    WHEN NO_DATA_FOUND THEN -- ORA-01403 SQLCODE = +100 没有扑ֈ数据
      ...
    WHEN NOT_LOGGED_ON THEN -- ORA-01012 SQLCODE = -1012
      ...
    WHEN PROGRAM_ERROR THEN -- ORA-06501 SQLCODE = -6501 E序错误
      ...
    WHEN STORAGE_ERROR THEN -- ORA-06500 SQLCODE = -6500
      ...
    WHEN TIMEOUT_ON_RESOURCE THEN -- ORA-00051 SQLCODE = -51
      ...
    WHEN TOO_MANY_ROWS THEN -- ORA-01422 SQLCODE = -1422 q回多行
      ...
    WHEN TRANSACTION_BACKED_OUT THEN -- ORA-00061 SQLCODE = -61
      ...
    WHEN VALUE_ERROR THEN -- ORA-06502 SQLCODE = -6502 数D{换错?br />      ...
    WHEN ZERO_DIVIDE THEN -- ORA-01476 SQLCODE = -1476 被零?br />      ...
    WHEN OTHERS THEN -- 其它M错误的处?br />      ...
  END;

  3) 用户定义的例?br />  DECLARE
    FIND_DATA_EMP    EXCEPTION;
  BEGIN
    IF ... THEN
      RAISE FIND_DATA_EMP;
    END IF;
  EXCEPTION
    WHEN LOB_NO_LOCKED THEN
      ...
  END;
  4) EXCEPTION_INIT的?br />  PRAGMA EXCEPTION_INIT(例外? ORACLE错误?;
  注:(x)PRAGMA 是一个编译器命o(h)Q可以认为是对编译器的一个注释?br />  例:(x)
  DECLARE
    ZERO_DIVIDE1    EXCEPTION;
    PRAGMA EXCEPTION_INIT(ZERO_DIVIDE1, -1476);
  BEGIN
    ...
  EXCEPTION
    WHEN ZERO_DIVIDE1 THEN
      ...
  END;



飞熊 2010-08-03 11:32 发表评论
]]>
oracle索引?U用模?/title><link>http://www.aygfsteel.com/kyleYang/archive/2010/07/26/327107.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Sun, 25 Jul 2010 16:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2010/07/26/327107.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/327107.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2010/07/26/327107.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/327107.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/327107.html</trackback:ping><description><![CDATA[索引的用对数据库的性能有巨大的影响?<br />共有五类不同的用模式?<br /><br />1。INDEX UNIQUE SCAN    效率最高,主键或唯一索引 <br />2。INDEX FULL SCAN      有顺序的输出Q不能ƈ行读索引 <br />3。INDEX FAST FULL SCAN  ȝ最块,可以q行讉K索引Q但输出不按序 <br />4。INDEX RANGE SCAN      l定的区间查?<br />5。INDEX SKIP SCAN       联合索引Q不同D的列,要攑֜前面 <br /><br />--实验后的总论?<br />能用唯一索引Q一定用唯一索引 <br />能加非空Q就加非I约?<br />一定要l计表的信息Q烦引的信息Q柱状图的信息?<br />联合索引的顺序不同,影响索引的选择Q尽量将值少的放在前?<br />只有做到以上四点Q数据库才会(x)正确的选择执行计划?<br />conn system/manager <br />grant select any dictionary to scott; <br /><br />conn scott/tiger <br />drop table t1 purge; <br />create table t1 as select * from dba_objects; <br />analyze table t1 compute statistics; <br />create index it1 on t1(object_type); <br />set autot traceonly <br /><br />select distinct object_type from t1; <br />是全表扫描Qؓ(f)什么不使用索引呢?因ؓ(f)索引中不能含有null| <br />如果使用索引可能生不正确的结果?<br /><br />--增加非空U束 <br />alter table t1 modify (object_type not null); <br />select distinct object_type from t1  ; <br />使用INDEX FAST FULL SCAN方式查找数据 <br /><br />-- <br />select  object_type from t1; <br />使用INDEX FAST FULL SCANQ因Z需要排?<br /><br />select  object_type from t1 order by 1; <br />使用INDEX FULL SCAN,因ؓ(f)要按照顺序输?<br /><br />select  object_type from t1 where object_type='TABLE'; <br />使用INDEX RANGE SCAN <br /><br />--使用非唯一索引 <br />create index i2t1 on t1(object_id); <br />select * from t1 where object_id=3762; <br />使用INDEX RANGE SCAN,因ؓ(f)数据库不知道是否唯一 <br /><br />--使用唯一索引 <br />drop index i2t1; <br />create unique index i2t1 on t1(object_id); <br />使用INDEX UNIQUE SCAN,因ؓ(f)数据库知道是唯一?<br /><br />--跌的扫描烦?<br />create index i3t1 on t1(object_type,object_name); <br />select * from t1 where object_name='EMP'; <br />select object_name from t1 where object_name='EMP'; <br />使用INDEX SKIP SCANQ因为数据库知道可以跌object_type,虽然object_name在第二个列?<br /><br />--联合索引的顺序不同,影响索引的选择Q尽量将值少的放在前?<br />drop index i3t1; <br />drop index it1; <br />create index i3t1 on t1(object_name,object_type); <br />select * from t1 where object_type='TABLE'; <br />计划为全表扫描?<img src ="http://www.aygfsteel.com/kyleYang/aggbug/327107.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2010-07-26 00:28 <a href="http://www.aygfsteel.com/kyleYang/archive/2010/07/26/327107.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>递归写法 -- DB2http://www.aygfsteel.com/kyleYang/archive/2010/03/26/316649.html飞熊飞熊Fri, 26 Mar 2010 08:16:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/03/26/316649.htmlhttp://www.aygfsteel.com/kyleYang/comments/316649.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/03/26/316649.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/316649.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/316649.htmlAS (
         SELECT ROW_ID,PARENT_MODULE_ID,MENU_NAME FROM          ad_program 
         WHERE row_id=50
         UNION ALL
         SELECT A.ROW_ID,A.PARENT_MODULE_ID,A.MENU_NAME
         FROM ad_program A,TROOT B 
         WHERE  A.PARENT_MODULE_ID=B.ROW_ID
)
SELECT * FROM TROOT

飞熊 2010-03-26 16:16 发表评论
]]>
Oralce 在防火墙后的讉Khttp://www.aygfsteel.com/kyleYang/archive/2010/02/02/311603.html飞熊飞熊Tue, 02 Feb 2010 01:25:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/02/02/311603.htmlhttp://www.aygfsteel.com/kyleYang/comments/311603.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/02/02/311603.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/311603.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/311603.htmlHKEY_LOCAL_MACHINESOFTWAREORACLEHOME0
上新Z个字W串|(x)
USE_SHARED_SOCKET=true?img src ="http://www.aygfsteel.com/kyleYang/aggbug/311603.html" width = "1" height = "1" />

飞熊 2010-02-02 09:25 发表评论
]]>
Oracle 用户数据字典 以及(qing) 查询表字D?/title><link>http://www.aygfsteel.com/kyleYang/archive/2010/02/02/311599.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Tue, 02 Feb 2010 01:20:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2010/02/02/311599.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/311599.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2010/02/02/311599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/311599.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/311599.html</trackback:ping><description><![CDATA[ <span style="COLOR: #ff0000">查看当前用户的缺省表I间<br />SQL>select username,default_tablespace from user_users;<br /><br />查看当前用户的角?br />SQL>select * from user_role_privs;<br /><br />查看当前用户的系l权限和表权限<br />SQL>select * from user_sys_privs;<br />SQL>select * from user_tab_privs;<br /><br />查看用户下所有的?br />SQL>select * from user_tables;<br /><br />昄用户信息(所属表I间)<br />select default_tablespace,temporary_tablespace<br />from dba_users where username='GAME';<br /><br />1、用?br /><br />查看当前用户的缺省表I间<br />SQL>select username,default_tablespace from user_users;<br /><br />查看当前用户的角?br />SQL>select * from user_role_privs;<br /><br />查看当前用户的系l权限和表权限<br />SQL>select * from user_sys_privs;<br />SQL>select * from user_tab_privs;<br /><br />昄当前?x)话所h的权?br />SQL>select * from session_privs;<br /><br />昄指定用户所h的系l权?br />SQL>select * from dba_sys_privs where grantee='GAME';<br /><br />昄Ҏ(gu)用户<br />select * from v$pwfile_users;<br /><br />昄用户信息(所属表I间)<br />select default_tablespace,temporary_tablespace<br />from dba_users where username='GAME';<br /><br />昄用户的PROFILE<br />select profile from dba_users where username='GAME';<br /><br /><br />2、表<br /><br />查看用户下所有的?br />SQL>select * from user_tables;<br /><br />查看名称包含log字符的表<br />SQL>select object_name,object_id from user_objects<br />where instr(object_name,'LOG')>0;<br /><br />查看某表的创建时?br />SQL>select object_name,created from user_objects where object_name=upper('&table_name');<br /><br />查看某表的大?br />SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments<br />where segment_name=upper('&table_name');<br /><br />查看攑֜ORACLE的内存区里的?br />SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;<br /><br />3、烦?br /><br />查看索引个数和类?br />SQL>select index_name,index_type,table_name from user_indexes order by table_name;<br /><br />查看索引被烦引的字段<br />SQL>select * from user_ind_columns where index_name=upper('&index_name');<br /><br />查看索引的大?br />SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments<br />where segment_name=upper('&index_name');<br /><br />4、序列号<br /><br />查看序列Plast_number是当前?br />SQL>select * from user_sequences;<br /><br />5、视?br /><br />查看视图的名U?br />SQL>select view_name from user_views;<br /><br />查看创徏视图的select语句<br />SQL>set view_name,text_length from user_views;<br />SQL>set long 2000; 说明Q可以根据视囄text_lengthD定set long 的大?br />SQL>select text from user_views where view_name=upper('&view_name');<br /><br />6、同义词<br /><br />查看同义词的名称<br />SQL>select * from user_synonyms;<br /><br />7、约束条?br /><br />查看某表的约束条?br />SQL>select constraint_name, constraint_type,search_condition, r_constraint_name<br />from user_constraints where table_name = upper('&table_name');<br /><br />SQL>select c.constraint_name,c.constraint_type,cc.column_name<br />from user_constraints c,user_cons_columns cc<br />where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')<br />and c.owner = cc.owner and c.constraint_name = cc.constraint_name<br />order by cc.position;<br /><br />8、存储函数和q程<br /><br />查看函数和过E的状?br />SQL>select object_name,status from user_objects where object_type='FUNCTION';<br />SQL>select object_name,status from user_objects where object_type='PROCEDURE';<br /><br />查看函数和过E的源代?br />SQL>select text from all_source where owner=user and name=upper('&plsql_name');<br /></span>--------------------------------------------------oracle 查询 表字D?以及(qing)字段 数据cd -----------------------------------------<br /><br /><p>W一U?/p><p>select cname from col where tname='EMP';</p><p>W二U?/p><p><span style="COLOR: #003366">select column_name from user_tab_columns where table_name='EMP';</span></p><p><span style="COLOR: #003366">介绍  如果查询数据的?字段数据cd</span></p><p><span style="COLOR: #003366">select data_type from user_tab_columns where table_name='EMP';</span></p><p><span style="COLOR: #003366">两个一h</span></p><p><span style="COLOR: #003366">select data_type,column_name from user_tab_columns where table_name='EMP';<br /></span><br />--------------------------------------------查询 字段注释---------------------------------------------<br /><br />select * from user_col_comments ;//所有的注释<br />select * from user_col_comments where table_name='你的?emp)' ;//指定表的注释<br /></p><img src ="http://www.aygfsteel.com/kyleYang/aggbug/311599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2010-02-02 09:20 <a href="http://www.aygfsteel.com/kyleYang/archive/2010/02/02/311599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>抽样表扫?/title><link>http://www.aygfsteel.com/kyleYang/archive/2010/02/01/311505.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Mon, 01 Feb 2010 06:32:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2010/02/01/311505.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/311505.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2010/02/01/311505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/311505.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/311505.html</trackback:ping><description><![CDATA[抽样表扫描(sample table scanQ只d一个表的部分数据。其实我们只选择表的部分数据的话Q可以用rownum来限制也很方ѝ但是考虑如下情况Q?br />A表和B表joinQ我只想A表的部分数据去连接B表,此时用sample方便的多。如果用rownum需要用一个subquery?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.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008080">--</span><span style="COLOR: #008080">用SampleQ?/span><span style="COLOR: #008080"><br /><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> A.id,A.name </span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000"> A sample block(</span><span style="FONT-WEIGHT: bold; COLOR: #800000">20</span><span style="COLOR: #000000">),B <br /><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">where</span><span style="COLOR: #000000"> A.id</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">B.id<br /><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008080">--</span><span style="COLOR: #008080">用RownumQ?/span><span style="COLOR: #008080"><br /><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> A.id,A.name </span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">select</span><span style="COLOR: #000000"> a.id,a.name </span><span style="COLOR: #0000ff">from</span><span style="COLOR: #000000"> a </span><span style="COLOR: #0000ff">where</span><span style="COLOR: #000000"> rownum</span><span style="COLOR: #808080"><</span><span style="FONT-WEIGHT: bold; COLOR: #800000">100</span><span style="COLOR: #000000">) A,B <br /><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">where</span><span style="COLOR: #000000"> A.id</span><span style="COLOR: #808080">=</span><span style="COLOR: #000000">B.id</span></div><p>抽样表扫描有两种形式Q一U是抽样表中行数的一个百分比Q一个是抽样表中块数的一个百分比。注意都是百分比。语法如下:(x)</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /><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"> employees SAMPLE (</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">);</span><span style="COLOR: #008080">--</span><span style="COLOR: #008080">q回行数乘以1%</span><span style="COLOR: #008080"><br /><img alt="" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" align="top" /></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"> employees SAMPLE BLOCK (</span><span style="FONT-WEIGHT: bold; COLOR: #800000">1</span><span style="COLOR: #000000">);</span><span style="COLOR: #008080">--</span><span style="COLOR: #008080">q回块数乘以1%</span></div><p>也可以在视图上用SAMPLE?br /></p><img src ="http://www.aygfsteel.com/kyleYang/aggbug/311505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2010-02-01 14:32 <a href="http://www.aygfsteel.com/kyleYang/archive/2010/02/01/311505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中,当误删了数据Ӟ如何恢复q些数据http://www.aygfsteel.com/kyleYang/archive/2010/01/17/309864.html飞熊飞熊Sun, 17 Jan 2010 09:14:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/01/17/309864.htmlhttp://www.aygfsteel.com/kyleYang/comments/309864.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/01/17/309864.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/309864.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/309864.html当你不小心误删了Oracle数据Ӟ怎么办,应该如何恢复q些数据Q?/p>

--好像只能恢复当日删除的数?br />create table t_hjhb_hbjcjl2 as
select * from t_hjhb_hbjcjl as of timestamp to_timestamp('2009-06-10 10:28:00','YYYY-MM-DD HH24:MI:SS');


查找要恢复的数据记录Q然后再导入t_hjhb_hbjcjl表里
insert into t_hjhb_hbjcjl select * from t_hjhb_hbjcjl2



飞熊 2010-01-17 17:14 发表评论
]]>
DB2用一张表更新其他表的数据http://www.aygfsteel.com/kyleYang/archive/2010/01/12/309160.html飞熊飞熊Tue, 12 Jan 2010 08:09:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2010/01/12/309160.htmlhttp://www.aygfsteel.com/kyleYang/comments/309160.htmlhttp://www.aygfsteel.com/kyleYang/archive/2010/01/12/309160.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/309160.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/309160.html表结构:(x)
CREATE TABLE ATEST
 (ID    INTEGER,
  NAME  VARCHAR(256),
  CODE  INTEGER,
  NAME2 VARCHAR(256)
 )

CREATE TABLE BTEST
 (ID    INTEGER,
  CODE  INTEGER
 )

CREATE TABLE CTEST
 (ID    INTEGER,
  NAME  VARCHAR(256),
  NAME2 VARCHAR(256)
 )

SQL语句Q?br />一张表更新另一张表的字D:(x)
update atest
set atest.name=(select ctest.name from ctest where atest.id = ctest.id)
where atest.id in  (select ctest.id from ctest);

两张表关联更新另一张表的字D:(x)
update atest
set (name,name2) = (SELECT CASE WHEN CTEST.NAME IS NULL THEN ATEST.NAME ELSE CTEST.NAME END, CASE WHEN CTEST.NAME2 IS NULL THEN ATEST.NAME2 ELSE CTEST.NAME2 END FROM BTEST LEFT JOIN CTEST on BTEST.ID = CTEST.ID  WHERE atest.CODE = BTEST.CODE)
WHERE atest.CODE IN (SELECT BTEST.CODE FROM BTEST);


另外一? http://blog.csdn.net/Bobwu/archive/2009/01/13/3768636.aspx
1.
declare
cursor t1 is select * from tablename;
begin
for rec in t1 loop
update tablename t set t.detail=rec.jieshao where t.objectid=rec.objid;
end loop;
end;

2.

update   student   set   (name,id   )=  
  (select   name   ,id     from   (select   student.rowid   rd,student1.name,student1.id   from   student1,student   where   student1.int_id   =student.int_id)   tmp  
  where   student.rowid=tmp.rd);  
  commit;

3.

update test_a a set (a.name,a.age)=
(select b.name,b.age from test_b b where a.id = b.id) where exists
(select * from test_b c where c.id=a.id)

4.

UPDATE   t_A   SET   Djrq=    
  (  
          SELECT   djrq   FROM   t_B   WHERE   t_A.ID   =   T_B.ID    
          WHERE   ROWNUM   =   1    
  )  
  WHERE   t_A.ID   IN    
  (  
          SELECT   ID   FROM   t_B   WHERE   jwh='XX?  
  )

5.

update tbl1 a
   set (a.col1, a.col2) = (select b.col1, b.col2
                              from tbl2 b
                              where a.key = b.key)
   where a.key in(select key from tbl2)



飞熊 2010-01-12 16:09 发表评论
]]>
Oracle PL/SQL游标的学?/title><link>http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304709.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Thu, 03 Dec 2009 14:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304709.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/304709.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/304709.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/304709.html</trackback:ping><description><![CDATA[<strong>一 游标是什?/strong> <br /> <br /> 游标字面理解是游动的光标?<br /> <br /> 用数据库语言来描qͼ(x)游标是映在l果集中一行数据上的位|实体,有了游标Q用户就可以讉Kl果集中的Q意一行数据了Q将游标攄到某行后Q即可对该行数据q行操作Q例如提取当前行的数据等?<br /> <br /> <strong>?游标的分c?/strong> <br /> <br /> 昑ּ游标和隐式游?<br /> <br /> 昑ּ游标的用需?步:(x) <br /> <br /> 1. 声明游标 <br /> <br /> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6"> <pre><ccid_code>CURSOR mycur(vartype number) is select emp_no,emp_zc from cus_emp_basic where com_no = vartype;</ccid_code></pre> </td> </tr> </tbody> </table> </ccid_nobr><br /> <br /> 2. 打开游标 <br /> <br /> open mycur(000627) <br /> <br /> 注:(x)000627是参?<br /> <br /> 3. d数据 <br /> <br /> fetch mycur into varno, varprice; <br /> <br /> 4. 关闭游标 <br /> <br /> close mycur; <br /> <br /> <strong>?游标的属?/strong> <br /> <br /> oracle 游标?个属性:(x)%ISOPENQ?FOUNDQ?NOTFOUNDQ?ROWCOUNT?<br /> <br /> %ISOPEN判断游标是否被打开Q如果打开%ISOPEN{于true,否则{于falseQ?<br /> <br /> %FOUND %NOTFOUND判断游标所在的行是否有效,如果有效Q则%FOUNDD{于trueQ否则等于falseQ?<br /> <br /> %ROWCOUNTq回当前位置为止游标d的记录行数?<br /> <br /> <strong>?CZ</strong> <br /> <br /> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6"> <pre><ccid_code>set serveroutput on; declare varno varchar2(20); varprice varchar2(20); CURSOR mycur(vartype number) is select emp_no,emp_zc from cus_emp_basic where com_no = vartype; begin if mycur%isopen = false then open mycur(000627); end if; fetch mycur into varno,varprice; while mycur%found loop dbms_output.put_line(varno||','||varprice); if mycur%rowcount=2 then exit; end if; fetch mycur into varno,varprice; end loop; close mycur; end;</ccid_code></pre> </td> </tr> </tbody> </table> </ccid_nobr><br /> <br /> PL/SQL记录的结构和C语言中的l构体类|是由一l数据项构成的逻辑单元?<br /> <br /> PL/SQL记录q不保存在数据库中,它与变量一P保存在内存空间中Q在使用记录时候,要首先定义记录结构,然后声明记录变量。可以把PL/SQL记录看作是一个用戯定义的数据类型?<br /> <br /> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6"> <pre><ccid_code>set serveroutput on; declare type person is record ( empno cus_emp_basic.emp_no%type, empzc cus_emp_basic.emp_zc%type); person1 person; cursor mycur(vartype number)is select emp_no,emp_zc from cus_emp_basic where com_no=vartype; begin if mycur%isopen = false then open mycur(000627); end if; loop fetch mycur into person1; exit when mycur%notfound; dbms_output.put_line('雇员~号:'||person1.empno||',地址:'||person1.empzc); end loop; close mycur; end;</ccid_code></pre> </td> </tr> </tbody> </table> </ccid_nobr><br /> 典型游标for 循环 <br /> <br /> 游标for循环C显C游标的一U快捷用方式,它用for循环依次dl果集中的行数据Q当form循环开始时Q游标自动打开Q不需要openQ,每@环一ơ系l自动读取游标当前行的数据(不需要fetch)Q当退出for循环Ӟ游标被自动关闭(不需要用closeQ。用游标for循环的时候不能用open语句Qfetch语句和close语句Q否则会(x)产生错误?<br /> <br /> <ccid_nobr> <table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"> <tbody> <tr> <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6"> <pre><ccid_code>set serveroutput on; declare cursor mycur(vartype number)is select emp_no,emp_zc from cus_emp_basic where com_no=vartype; begin for person in mycur(000627) loop dbms_output.put_line('雇员~号:'||person.emp_no||',地址:'||person.emp_zc); end loop; end;</ccid_code></pre> </td> </tr> </tbody> </table> </ccid_nobr> <img src ="http://www.aygfsteel.com/kyleYang/aggbug/304709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2009-12-03 22:45 <a href="http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TRUNCATE和DELETE的用法比?/title><link>http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304708.html</link><dc:creator>飞熊</dc:creator><author>飞熊</author><pubDate>Thu, 03 Dec 2009 14:44:00 GMT</pubDate><guid>http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304708.html</guid><wfw:comment>http://www.aygfsteel.com/kyleYang/comments/304708.html</wfw:comment><comments>http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kyleYang/comments/commentRss/304708.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kyleYang/services/trackbacks/304708.html</trackback:ping><description><![CDATA[<div id="wmqeeuq" class="title">使用 TRUNCATE TABLE 删除所有行<!----></div> <p align="right"><!--content type: DocStudio. Transform: devdiv2mtps.xslt.--></p> <div class="wmqeeuq" id="mainSection"> <div class="wmqeeuq" id="mainBody"> <p><!----></p> <p>若要删除表中的所有行Q则 TRUNCATE TABLE 语句是一U快速、有效的Ҏ(gu)。TRUNCATE TABLE 与不?WHERE 子句?DELETE 语句cM。但是,TRUNCATE TABLE 速度更快Qƈ且用更的pȝ资源和事务日志资源?/p> <p>?DELETE 语句相比QTRUNCATE TABLE h以下优点Q?/p> <ul> <li>所用的事务日志I间较少?br /> DELETE 语句每次删除一行,q在事务日志中ؓ(f)所删除的每行记录一个项。TRUNCATE TABLE 通过释放用于存储表数据的数据|删除数据Qƈ且在事务日志中只记录释放?br /> <li>使用的锁通常较少?br /> 当用行锁执?DELETE 语句Ӟ锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和,而不是锁定各行?br /> <li>如无例外Q在表中不会(x)留有Mc?br /> 执行 DELETE 语句后,表仍?x)包含空c例如,必须臛_使用一个排?(LCK_M_X) 表锁Q才能释攑֠中的I。如果执行删除操作时没有使用表锁Q表Q堆Q中包含许多空c对于烦引,删除操作?x)留下一些空,管q些会(x)通过后台清除q程q速释放?br /> </li> </ul> <p>?DELETE 语句相同Q?TRUNCATE TABLE 清空的表的定义与其烦引和其他兌对象一起保留在数据库中。如果表中包含标识列Q该列的计数器将重置列定义的U子倹{如果未定义U子Q则使用默认?1。若要保留标识计数器Q请使用 DELETE?/p> </div> </div> <img src ="http://www.aygfsteel.com/kyleYang/aggbug/304708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kyleYang/" target="_blank">飞熊</a> 2009-12-03 22:44 <a href="http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE函数大全http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304706.html飞熊飞熊Thu, 03 Dec 2009 14:42:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2009/12/03/304706.htmlhttp://www.aygfsteel.com/kyleYang/comments/304706.htmlhttp://www.aygfsteel.com/kyleYang/archive/2009/12/03/304706.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/304706.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/304706.html阅读全文

飞熊 2009-12-03 22:42 发表评论
]]>
EXECUTE IMMEDIATE用法http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304705.html飞熊飞熊Thu, 03 Dec 2009 14:37:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2009/12/03/304705.htmlhttp://www.aygfsteel.com/kyleYang/comments/304705.htmlhttp://www.aygfsteel.com/kyleYang/archive/2009/12/03/304705.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/304705.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/304705.html 它解析ƈ马上执行动态的SQL语句或非q行时创建的PL/SQL?动态创建和执行SQL语句性能前QEXECUTE IMMEDIATE的目标在于减企业费用ƈ获得较高的性能Q较之以前它相当Ҏ(gu)~码.管DBMS_SQL仍然可用Q但是推荐用EXECUTE IMMEDIATE,因ؓ(f)它获的收益在包之上?

-- 使用技?br />
1. EXECUTE IMMEDIATE不?x)提交一个DML事务执行Q应该显式提?br /> 如果通过EXECUTE IMMEDIATE处理DML命o(h)Q?br /> 那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分.
如果通过EXECUTE IMMEDIATE处理DDL命o(h),它提交所有以前改变的数据

2. 不支持返回多行的查询,q种交互用临时表来存储记录(参照例子如下)或者用REF cursors.

3. 当执行SQL语句Ӟ不要用分P当执行PL/SQL块时Q在其尾部用分号.

4. 在Oracle手册中,未详l覆盖这些功能?br /> 下面的例子展CZ所有用到Execute immediate的可能方?希望能给你带来方?

5. 对于Forms开发?当在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此功?

EXECUTE IMMEDIATE -- 用法例子

1. 在PL/SQLq行DDL语句
begin
   execute immediate 'set role all';
end;

2. l动态语句传?USING 子句)
declare
   l_depnam varchar2(20) := 'testing';
   l_loc     varchar2(10) := 'Dubai';
   begin
   execute immediate 'insert into dept values   (:1, :2, :3)'
     using 50, l_depnam, l_loc;
   commit;
end;

3. 从动态语句检索?INTO子句)
declare
   l_cnt     varchar2(20);
begin
   execute immediate 'select count(1) from emp'
     into l_cnt;
   dbms_output.put_line(l_cnt);
end;

4. 动态调用例E?例程中用到的l定变量参数必须指定参数cd.
黓认为INcd,其它cd必须昑ּ指定

declare
   l_routin    varchar2(100) := 'gen2161.get_rowcnt';
   l_tblnam    varchar2(20) := 'emp';
   l_cnt       number;
   l_status    varchar2(200);
begin
   execute immediate 'begin ' || l_routin || '(:2, :3, :4); end;'
     using in l_tblnam, out l_cnt, in out l_status;

   if l_status != 'OK' then
      dbms_output.put_line('error');
   end if;
end;

5. 返回g递到PL/SQL记录cd;同样也可?rowtype变量
declare
   type empdtlrec is record (empno   number(4),
                            ename   varchar2(20),
                            deptno   number(2));
   empdtl empdtlrec;
begin
   execute immediate 'select empno, ename, deptno ' ||
                    'from emp where empno = 7934'
     into empdtl;
end;

6. 传递ƈ索?INTO子句用在USING子句?br /> declare
   l_dept     pls_integer := 20;
   l_nam      varchar2(20);
   l_loc      varchar2(20);
begin
   execute immediate 'select dname, loc from dept where deptno = :1'
     into l_nam, l_loc
     using l_dept ;
end;

7. 多行查询选项.Ҏ(gu)选项用insert语句填充临时表,
用(f)时表q行q一步的处理,也可以用REF cursorsU正此缺?

declare
   l_sal    pls_integer := 2000;
begin
   execute immediate 'insert into temp(empno, ename) ' ||
                    '           select empno, ename from emp ' ||
                    '           where   sal > :1'
     using l_sal;
   commit;
end;

        对于处理动态语?EXECUTE IMMEDIATE 比以前可能用到的更容易ƈ且更高效.
当意图执行动态语句时Q适当地处理异常更加重?应该x于捕h有可能的异常.

飞熊 2009-12-03 22:37 发表评论
]]>
over partition by与group by 的区?http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304704.html飞熊飞熊Thu, 03 Dec 2009 14:34:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2009/12/03/304704.htmlhttp://www.aygfsteel.com/kyleYang/comments/304704.htmlhttp://www.aygfsteel.com/kyleYang/archive/2009/12/03/304704.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/304704.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/304704.html 目前我只知道一个这L(fng)区别Q?br /> 比如有一张表saraly:CREATE TABLE SALARY AS SELECT 'A' NAME,10 DEPT,1000 SALARY FROM DUAL UNION ALL SELECT 'B',10,2000 FROM DUAL UNION ALL SELECT 'C' ,20,1500 FROM DUAL UNION ALL SELECT 'D',20,3000 FROM DUAL UNION ALL
SELECT 'E',10,1000 FROM DUAL;
NAME DEPT SALARY
A         10     1000
B         10     2000
C         20     1500
D         20     3000
E         10     1000   
用over partition by 我就可以查询到每位员工本来的具体信息和它所在部门的d资:(x)
select name,dept,salary,sum(salary) over (partition by dept) total_salary from salary;  
name       dept         salary      tatal_salary
A        10        1000        4000
B        10        2000        4000
E        10        1000        4000
C        20        1500        4500
D        20        3000        4500

用goup by 没办法做到q点Q只能查询到每个部门的d资:(x)
select dept,sum(salary) total_salary from salary group by dept
dept        total_salary
10        4000
20        4500
另外over partion by q可以做到查询每位员工占部门d资的癑ֈ比:(x)
select name,dept,salary,salary*100/sum(salary) over (partition by dept) percent from salary;

name       dept         salary     percent
A        10        1000        25
B        10        2000        50
E        10        1000        25
C        20        1500        33.3333333333333
D        20        3000        66.6666666666667


飞熊 2009-12-03 22:34 发表评论
]]>
递归查询--l典http://www.aygfsteel.com/kyleYang/archive/2009/12/03/304702.html飞熊飞熊Thu, 03 Dec 2009 14:28:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2009/12/03/304702.htmlhttp://www.aygfsteel.com/kyleYang/comments/304702.htmlhttp://www.aygfsteel.com/kyleYang/archive/2009/12/03/304702.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/304702.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/304702.html CREATE TABLE TEST.AREATB
(
    ID                             NUMBER(6,0) NOT NULL,
    AREANAME                       VARCHAR2(256),
    PARENTAREAID                   NUMBER(6,0)
)

2.数据Q?br />
1 中国  -1
2 北京  1
3 安徽 1
4 合肥 3
5 宣武?/td> 2

3.SQLQ语?br /> select id, areaname, substr(sys_connect_by_path(areaname,','),2)
from AREATB bb
start with parentareaid = -1
connect by parentareaid=prior id 

4.l果Q?br />
1 中国 中国
2 北京 中国,北京
5 宣武?/td> 中国,北京,宣武?/td>
3 安徽 中国,安徽
4 合肥 中国,安徽,合肥


5.函数解释Q?br /> sys_connect_by_path 函数主要作用是可以把一个父节点下的所有子节点通过某个字符q行区分Q然后连接在一个列中显C?

飞熊 2009-12-03 22:28 发表评论
]]>
存储q程http://www.aygfsteel.com/kyleYang/archive/2009/12/02/304528.html飞熊飞熊Wed, 02 Dec 2009 08:39:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2009/12/02/304528.htmlhttp://www.aygfsteel.com/kyleYang/comments/304528.htmlhttp://www.aygfsteel.com/kyleYang/archive/2009/12/02/304528.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/304528.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/304528.html1.EXCEPTION:
DECLARE
   numerator   NUMBER;
   denominator NUMBER;
   the_ratio   NUMBER;
   lower_limit CONSTANT NUMBER := 0.72;
   samp_num    CONSTANT NUMBER := 132;
BEGIN
   SELECT x, y INTO numerator, denominator FROM result_table
      WHERE sample_id = samp_num;
   the_ratio := numerator/denominator;

   IF the_ratio > lower_limit THEN
      INSERT INTO ratio VALUES (samp_num, the_ratio);
   ELSE
      INSERT INTO ratio VALUES (samp_num, -1);
   END IF;
   COMMIT;
EXCEPTION
   WHEN ZERO_DIVIDE THEN
      INSERT INTO ratio VALUES (samp_num, 0);
      COMMIT;
   WHEN OTHERS THEN
      ROLLBACK;
END;

2.
CREATE OR REPLACE PROCEDURE
    get_student_major
        (v_student_id  IN  students.student_id%TYPE,
         v_name        OUT students.student_name%TYPE) IS
BEGIN
    SELECT student_name
      INTO v_name
      FROM students
     WHERE student_id = v_student_id;
exception
    WHEN TOO_MANY_ROWS THEN dbms_output.put_line('TMR error'); -- 行数 > 1
    WHEN NO_DATA_FOUND THEN dbms_output.put_line('NDF error'); -- 行数?0
END;


3.
CREATE OR REPLACE FUNCTION
    update_salaries(new_sal IN professors.salary%TYPE) -- %TYPE 某一字段的类型作为类?br />     RETURN NATURAL IS
BEGIN
    UPDATE professors2 SET salary = new_sal;
    RETURN SQL%ROWCOUNT; -- 判断更新的行?br /> END update_salaries;

4.
CREATE OR REPLACE PROCEDURE
    add_student(rec IN OUT students%ROWTYPE) IS -- students%ROWTYPE作ؓ(f)表的某一行作为变量类?br /> BEGIN
    SELECT 'A'||students_pk_seq.nextval
      INTO rec.student_id
      FROM dual;

    INSERT INTO students (student_id, student_name,
        college_major, status, state, license_no)
    VALUES (rec.student_id, rec.student_name,
        rec.college_major, rec.status,
        rec.state, rec.license_no);
END add_student;


5.
DECLARE
   dept_rec1 dept%ROWTYPE;  --dept是表?则dept_rec1 ?dept_rec2 可以怺赋?br />    dept_rec2 dept%ROWTYPE;

   CURSOR c1 IS SELECT deptno, dname, loc FROM dept;
   dept_rec3 c1%ROWTYPE;
BEGIN
   ...
   dept_rec1 := dept_rec2;

However, because dept_rec2 is based on a table and dept_rec3 is based on a cursor, the following assignment is illegal:
dept_rec2 := dept_rec3;  -- illegal


6.
DECLARE
   CURSOR my_cursor IS
      SELECT sal + NVL(comm, 0) wages, ename FROM emp;
   my_rec  my_cursor%ROWTYPE;
BEGIN
   OPEN my_cursor;
   LOOP
      FETCH my_cursor INTO my_rec;
      EXIT WHEN my_cursor%NOTFOUND;

      IF my_rec.wages > 2000 THEN
         INSERT INTO temp VALUES (NULL, my_rec.wages, my_rec.ename);
      END IF;
   END LOOP;
   CLOSE my_cursor;
END;


7. *****
-- 包,函数Q存储过E?br /> CREATE OR REPLACE PACKAGE BODY students_pkg IS

    FUNCTION add_student(rec IN students%ROWTYPE)
        RETURN students.student_id%TYPE
    IS
        ID students.student_id%TYPE;
    BEGIN
        SELECT 'A'||students_pk_seq.nextval INTO ID FROM dual;

        INSERT INTO students (student_id, student_name,
            college_major, status, state, license_no)
        VALUES (ID, rec.student_name, rec.college_major,
            rec.status, rec.state, rec.license_no);

        RETURN ID;
    END add_student;

    PROCEDURE add_vehicle(rec IN student_vehicles%ROWTYPE) IS
    BEGIN
        INSERT INTO student_vehicles (state, tag_no,
            vehicle_desc, student_id, parking_sticker)
        VALUES (rec.state, rec.tag_no,
            rec.vehicle_desc, rec.student_id, rec.parking_sticker);
    END add_vehicle;
END students_pkg;

-- 执行
DECLARE
    student students%ROWTYPE;
    vehicle student_vehicles%ROWTYPE;
BEGIN
    student.student_name  := 'Jack';
    student.college_major := 'HI';
    student.status        := 'Degree';
    student.state         := 'CA';
    student.license_no    := 'MV-232-14';

    student.student_id := students_pkg.add_student(student);

    vehicle.state           := 'CA';
    vehicle.tag_no          := 'CA-1234';
    vehicle.vehicle_desc    := 'Mustang';
    vehicle.parking_sticker := 'A-101';

    vehicle.student_id := student.student_id;

    students_pkg.add_vehicle(vehicle);
END;

 

8.怎样从一个过E返回一个结果集
create or replace procedure p_stu_lst(result out sys_refcursor) is
BEGIN
   OPEN RESULT FOR SELECT * FROM test;
end p_stu_lst;
SQL> select * from test;

NAME       KM                 CJ
---------- ---------- ----------
张三       语文               80
张三       数学               86
张三       p               75
李四       语文               78
李四       数学               85
李四       p               78
李四       物理               90

已选择7行?br />
SQL> exec p_stu_lst(:aaa);

PL/SQL q程已成功完成?br />
SQL> print aaa

NAME       KM                 CJ
---------- ---------- ----------
张三       语文               80
张三       数学               86
张三       p               75
李四       语文               78
李四       数学               85
李四       p               78
李四       物理               90

已选择7行?/div>



飞熊 2009-12-02 16:39 发表评论
]]>交叉报表http://www.aygfsteel.com/kyleYang/archive/2009/12/02/304527.html飞熊飞熊Wed, 02 Dec 2009 08:37:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2009/12/02/304527.htmlhttp://www.aygfsteel.com/kyleYang/comments/304527.htmlhttp://www.aygfsteel.com/kyleYang/archive/2009/12/02/304527.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/304527.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/304527.html1.表:(x)
id   name   kechen   fengshu
1    张三     数学          56
2    张三     语文          67
3    张三     化学          87
4    李四     语文          24
5    王五     化学          54
通过select 语句得到 下面的结?br /> name  数学  语文  化学
张三    56      67      87
李四    null   24     null
王五    null   null    54

2.{案如下Q?br /> select name,sum(yuwen) yuwen,sum(shuxue)  shuxue,sum(huaxue)  huaxue
from(
    select name,
       case kechen when '语文' then fengshu end yuwen,
    case kechen when '数学' then fengshu end shuxue,
    case kechen when '化学' then fengshu end huaxue
    from table
 )as t1
group by name



飞熊 2009-12-02 16:37 发表评论
]]>
SQL重复记录查询http://www.aygfsteel.com/kyleYang/archive/2009/12/02/304526.html飞熊飞熊Wed, 02 Dec 2009 08:33:00 GMThttp://www.aygfsteel.com/kyleYang/archive/2009/12/02/304526.htmlhttp://www.aygfsteel.com/kyleYang/comments/304526.htmlhttp://www.aygfsteel.com/kyleYang/archive/2009/12/02/304526.html#Feedback0http://www.aygfsteel.com/kyleYang/comments/commentRss/304526.htmlhttp://www.aygfsteel.com/kyleYang/services/trackbacks/304526.htmlselect * from people
where peopleId in (select   peopleId from   people group by   peopleId having count (peopleId) > 1)

2、删除表中多余的重复记录Q重复记录是Ҏ(gu)单个字段QpeopleIdQ来判断Q只留有rowid最的记录
delete from people
where peopleId in (select   peopleId from people group by   peopleId   having count (peopleId) > 1)
and rowid not in (select min(rowid) from   people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录Q多个字D)
select * from vitae a
where (a.peopleId,a.seq) in   (select peopleId,seq from vitae group by peopleId,seq having

count(*) > 1)

4、删除表中多余的重复记录Q多个字D)Q只留有rowid最的记录
delete from vitae a
where (a.peopleId,a.seq) in   (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录Q多个字D)Q不包含rowid最的记录
select * from vitae a
where (a.peopleId,a.seq) in   (select peopleId,seq from vitae group by peopleId,seq having

count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(?
比方?br />在A表中存在一个字D“name”,
而且不同记录之间的“name”值有可能?x)相同?br />现在是需要查询出在该表中的各记录之间Q“name”值存在重复的;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果q查性别也相同大则如?
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(?
Ҏ(gu)一
declare @max integer,@id integer
declare cur_rows cursor local for select
dD?count(*) from 表名 group by dD?having

count(*) >Q?1
open cur_rows
fetch cur_rows into @id,@max
while @@fetch_status=0
begin
select @max = @max -1
set rowcount @max
delete from 表名 where dD?= @id
fetch cur_rows into @id,@max
end
close cur_rows
set rowcount 0

Ҏ(gu)?/p>

有两个意义上的重复记录,一是完全重复的记录Q也x有字D均重复的记录,

二是部分关键字段重复的记录,比如Name字段重复Q而其他字D不一定重复或都重复可以忽略?/p>

  1、对于第一U重复,比较Ҏ(gu)解决Q?br />select distinct * from tableName

  可以得到无重复记录的结果集?/p>

  如果该表需要删除重复的记录Q重复记录保?条)Q可以按以下Ҏ(gu)删除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp

  发生q种重复的原因是表设计不周生的Q增加唯一索引列即可解冟?/p>

  2、这c重复问题通常要求保留重复记录中的W一条记录,操作Ҏ(gu)如下

  假设有重复的字段为Name,AddressQ要求得到这两个字段唯一的结果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)

  最后一个select卛_CNameQAddress不重复的l果集(但多了一个autoID字段Q实际写时可以写

在select子句中省L列)

(?查询重复
select * from tablename

where id in (select id from tablename group by id having count(id) > 1)

(?删除重复
delete from test a where a.rowid !=
 ( select max(b.rowid) from test b where a.id = b.id  )

(?删除重复
Ҏ(gu)一Qdelete from demo a where a.rowid <> (select max(rowid) from demo b where
b.object_id=a.object_id);
耗时Q几个小时以?
Ҏ(gu)二:(x) delete from demo where rowid in
(select rid from
(select rowid rid,row_number() over(partition by object_id order by rowid) rn
from demo)
where rn <> 1 );
耗时Q?0U?br style="FONT-FAMILY: " />Ҏ(gu)三:(x) create table demo2 as
select object_id,owner... from
(select demo.*,row_number() over(partition by object_id order by rowid) rn from demo)
where rn = 1;
truncate table demo; insert into demo select * from demo2; drop table demo2;
p时Q?10U,适合大数据量的情况,产生更少回滚量;



飞熊 2009-12-02 16:33 发表评论
]]>
վ֩ģ壺 üɽ| ɽ| | ̺| | | ϸ| | | | ϰˮ| Դ| | °Ͷ| ̰| ӳ| Դ| | | | | ʡ| | | | ͼ| | ߶| | Ԫı| | | Ƽ| Ͱ| Ȫ| ˮ| | | Ԫ| ¡| ̩|