oracle 乱七八糟的技巧

用了oracle3年的一些技巧 实在懒得整理了。。。
恢复误删表数据的语句
insert into tablename
select * from tablename as of timestamp to_date('2013-03-25', 'yyyy-mm-dd');

误删oracle表  恢复办法
select * from recyclebin;
flashback table tablename  to before drop;


清除共享池
alter system flush shared_pool;

DECODE函数
oracle特有的函数decode(colmn,值,代替的值,以上都没有原来的值)
在其他数据库可以使用case  when 来代替
sum(decode())  分类汇总对数据



oracle字符串连接问题
可使用'||'连接符如下:
select col1 as description,col2 ||'('|| col3 ||')' as label from table
还可以使用concat( str,str)函数在标准的SQL中允许存在2个以上的参数 但是oracle中只能支持两个参数但可以使用多层嵌套来解决这个问题
多个字段distinct 的技巧
对数据的多个字段distinct的方式可以使用||来对数据进行查询

在不记得的情况下找表或者存储过程
查看所有存储过程或者函数
select * from user_source where type='PROCEDURE' and name='XXXX';
查看所有的表
select * from tab where tname like '%XXX%';
查看一些DBA 信息
select * from dba_source;

某个值为空时替换函数
String1是要替换的字段 replace_with是替换的值
mysql是ifnull(string1, replace_with) 
mssql是isnull(string1, replace_with)
oracle是nvl(string1,replace_with)
oracle nvl2(str1,str2,str3) str1不为空是str2 str1为空是str3

oracle取四舍五入的约数值
SELECT ROUND( number, [ decimal_places ] ) FROM DUAL
说明
number : 将要处理的数值
decimal_places : 四舍五入,小数取几位,不填默认为0
select round(123.456) from dual;              结果: 123
select round(123.456, 0) from dual;          结果: 123
select round(123.456, 1) from dual;          结果: 123.5
select round(123.456, 2) from dual;          结果:123.46
select round(123.456, 3) from dual;          结果: 123.456
select round(-123.456, 2) from dual;         结果:-123.46

在某些计算的情况下注意使用round来进行处理否则会出下小数部分太长而自动转换为科学计数法的情况


查找子节点的sql
select * from  XXXX connect by prior cols=colf start with cols='001'
主要作用是上下级关系的数据进行间隔查询


临时表创建
DROP TABLE TABLENAME CASCADE CONSTRAINTS;
CREATE GLOBAL TEMPORARCREATE INDEX TABLE_INDEX ON TABLENAME
Y TABLE TABLENAME
(
  DEPARTID  VARCHAR2(8 BYTE),
  TYPE      VARCHAR2(20 BYTE)
)
ON COMMIT DELETE ROWS
NOCACHE;

(DEPARTID, TYPE);
临时表的作用主要是用于对多表查询的分步骤查询 优化sql查询速度

多个字段排序不同的规则
select * from XXX  order by col1 desc,col2 asc


1)按笔画排序
select * from Table order by nlssort(columnName,'NLS_SORT=SCHINESE_STROKE_M')
2)按部首排序
select * from Table order by nlssort(columnName,'NLS_SORT=SCHINESE_RADICAL_M')
3)按拼音排序
select * from Table order by nlssort(columnName,'NLS_SORT=SCHINESE_PINYIN_M');





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—



你可能感兴趣的:(oracle,技巧)