知识大全 Oracle中使用的若干技术经典总结
Posted 语句
篇首语:瞄准还不是射中,起跑还不算到达。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle中使用的若干技术经典总结相关的知识,希望对你有一定的参考价值。
Oracle中使用的若干技术经典总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
怎么样让我的用户名和密码不泄漏? ===================== 在unix下 我用sqlplus sys/sys登陆 别的用户很容易就能看到我的密码 怎么办? $ ps ef|grep sqlplus oracle : : pts/ : sqlplus sys/sys oracle : : pts/ : grep sqlplus 采用sqlplus /nolog sql>connect sys/sys 这样别的用户就看不到你的密码啦 怎样生成建表的完整的DDL语句? ==================== 用exp 再Imp show=y可以看到 或者使用某些Oracle 的小工具 比如quest的toad和sql*navigator truncate table和delete table有些什么区别? ========================== truncate: DDL no rollback possibility and no rollback segment usage quick release space used by the table except the original one delete: dml can rollback use rollback space not release space slow delete large table may cause ora error 如何删除重复的记录 ============= 第一个办法 生成建表的完整DDL语句 并且生成tab_bak的表名 insert into tab_bak select distinct * from tab_name; drop table tab_name rename tab_bak to tab_name; 第二个办法 DELETE FROM table_name A WHERE ROWID > ( SELECT min(rowid) FROM table_name B WHERE A key_values = B key_values); 第三个办法 Delete from my_table where rowid not in ( SQL> select max(rowid) from my_table group by my_column_name ); 第四个办法 delete from my_table t where exists (select x from my_table t where t key_value = t key_value and t key_value = t key_value and t rowid > t rowid); 如何快速为已有的表加上一个主键? ===================== 加上一个非空的列 比如seqno 然后 update table_name set seqno=rownum; 或者 CREATE SEQUENCE testseq START WITH INCREMENT BY ; update table_name set seqno=testseq nextval; SQL排序问题 我怎么才能选择出按照某个列排序后前N行来? ===================================== 在SQL*Server 里面 可以用这样的语句 select top col col from table_name; 从Oracle i开始 支持这样的语法(在子查询里面使用order by语句) select * from (select col col from table_name order by col col ) where rownum< ; 这样就能够起到同样的效果 在Oracle 或者以下 可以这样 SELECT col col FROM (SELECT /*+ INDEX_DESC (table_name index_name) */ col col FROM table_name) WHERE rownum < ; 使用提示可以让Oracle在子查询返回结果之前先对他进行排序 一般可以使用hintINDEX_DESC(TABLE_NAME INDEX_NAME)来起到这个作用 我们可以分别查看两个SQL的执行计划 scott@testdb> select * from sort_sample; ID NAME aa s fdisk format low format rows selected scott@testdb> create index sort_id_idx on sort_sample(id); Index created scott@testdb> set autotrace on explain scott@testdb> way : scott@testdb> select * from (select * from sort_sample order by id desc) where rownum< ; ID NAME s Execution Plan SELECT STATEMENT Optimizer=CHOOSE COUNT (STOPKEY) VIEW SORT (ORDER BY STOPKEY) TABLE ACCESS (FULL) OF SORT_SAMPLE scott@testdb> way :wrong result scott@testdb> select * from sort_sample where rownum< ; ID NAME aa Execution Plan SELECT STATEMENT Optimizer=CHOOSE COUNT (STOPKEY) TABLE ACCESS (FULL) OF SORT_SAMPLE scott@testdb> ANALYZE TABLE SORT_SAMPLE PUTE STATISTICS; Table analyzed scott@testdb> ANALYZE INDEX SORT_ID_IDX PUTE STATISTICS; Index analyzed scott@testdb> way : can work in oracle and oracle scott@testdb> select * from (select /*+index_desc(sort_sample sort_id_idx)*/ * from sort_sample) where rownum< ; ID NAME aa //原因 col sort_id_idx列为nullable 所以CBO不能确定 加上not null约束即可达到目的 用group by可以生成从小开始的排序 scott@testdb> SELECT ID NAME FROM (SELECT ID NAME COUNT(*) FROM SORT_SAMPLE GROUP BY ID NAME) WHERE ROWNUM< ; ID NAME aa low format Execution Plan SELECT STATEMENT Optimizer=CHOOSE (Cost= Card= Bytes= ) COUNT (STOPKEY) VIEW (Cost= Card= Bytes= ) SORT (GROUP BY STOPKEY) (Cost= Card= Bytes= ) TABLE ACCESS (FULL) OF SORT_SAMPLE (Cost= Card= 怎么每隔N条记录获得一条记录?比如第 等? ================================= CHAO@PING>select * from testseq; ID NAME this is th record this is th record this is th record this is th record this is th record this is th record this is th record this is th record this is th record this is th record rows selected CHAO@PING>select id name from (select id name rownum rz from testseq) temp where mod(rz )= ; ID NAME this is th record this is th record this is th record CHAO@PING> 如何删除一个列? =========== 从Oracle i开始 Oracle支持一个列的删除 语法如下 alter table tab_name drop column col ; 如何重命名一个列? ============== CHAO@PING> create table testrename(id number nama varchar ( )); Table created CHAO@PING> begin for x in loop insert into testrename values(x this is ||to_char(x)|| th record ); end loop; end; / PL/SQL procedure successfully pleted CHAO@PING> mit; Commit plete CHAO@PING> alter table testrename add name varchar ( ); Table altered CHAO@PING> update testrename set name=nama; rows updated CHAO@PING> alter table testrename drop column nama; Table altered CHAO@PING> select * from testrename; ID NAME cha138/Article/program/Oracle/201311/17969相关参考
()段区段块 Oracle中的段segment是占用磁盘存储空间的一个对象从逻辑上讲一个数据库由若干表空间(TABLESAPCE)组成每个表空间有若干个表(TABLE)每个表又可以分为若干数据段
DECODE函数相当于一条件语句(IF)它将输入数值与函数中的参数列表相比较根据输入值返回一个对应值函数的参数列表是由若干数值及其对应结果值组成的若干序偶形式当然如果未能与任何一个实参序偶匹配成功
Oracle经典书籍介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle经典书籍介绍
oracle常用经典SQL查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 常用SQL查询
Oracle优化经典文章------索引原理篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! O
Oracle查询表空间使用情况(经典篇) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查询表空
近来公司技术研发都在问我关于内存参数如何设置可以优化Oracle的性能所以抽时间整理了这篇文档以做参考 目的: 希望通过整理此文档使公司同事对oracle内存结构有一个全面的了解并在实际的工作
如何应对ORACLE面试中的问题技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 这里的回答并
Oracle游标使用总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle游标分为显示
Oracle游标使用总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Oracle游标分为显示游标