Oracle一些常用的操作

#Oracle一些常用的操作
##误操作撤回
1.恢复误删的表drop
flashback table cost_enclosure_file to before drop
2.查之前时间点的数据(误删的数据)
select * from TABLE_NAME as of timestamp to_timestamp(‘2019-10-16 14:35:00’,‘yyyy-mm-dd hh24:mi:ss’)
##修改操作
1、修改字段名:
  alter table Student rename COLUMN name to StuName;
2、修改数据类型:
  alter table Student modify (id varchar2(64));
3、修改表名
rename tablename1 to tablename2
##查看当前正在执行的sql,常用于查看死锁问题
select l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
a.sql_text,
a.action
from v s q l a r e a a , v sqlarea a, v sqlareaa,vsession s, v$locked_object l
where l.session_id = s.sid
and s.prev_sql_addr = a.address
order by sid, s.serial#

##修改序列值
alter sequence wlan_sink_count_seq increment by 200
修改递增值到想要的值
select wlan_sink_count_seq.nextval from dual
再查一次
alter sequence wlan_sink_count_seq increment by 1
在修改回去

##时间转换
1. 日期转化为字符串 (以2016年10月20日为例)
select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) strDateTime from dual; --获取年-月-日 时:分:秒
–显示结果为:2016-10-20 12:35:21
select to_char(sysdate,‘yyyymmdd hh24:mi:ss’) strDateTime from dual; --获取年月日 时:分:秒
–显示结果为:20161020 13:39:25
select to_char(sysdate,‘yyyymmdd’) strDateTime from dual; --获取年月日
–显示结果为:20161020
select to_char(sysdate,‘yyyy’) strYear from dual; --获取年
–显示结果为:2016
select to_char(sysdate,‘mm’) strMonth from dual; --获取月
–显示结果为:10
select to_char(sysdate,‘dd’) strDay from dual; --获取日
–显示结果为:20
select to_char(sysdate,‘hh24’) strHour from dual; --获取时
–显示结果为:13
select to_char(sysdate,‘mi’) strMinute from dual; --获取分
–显示结果为:46
select to_char(sysdate,‘ss’) strSecond from dual; --获取秒
–显示结果为:43
2. 字符串和时间互转
select to_date(‘2010-10-20 13:23:44’,‘yyyy-mm-dd hh24:mi:ss’) dateTime from dual;
显示结果:2010/10/20 13:23:44
select to_date(‘2010-10-20 13:23:44’,‘yyyy/mm/dd hh24:mi:ss’) dateTime from dual;
显示结果:2010/10/20 13:23:44
select to_char( to_date(222,‘J’),‘Jsp’) from dual
显示结果:Two Hundred Twenty-Two

	如果按照下面的例子写,会报错:ORA-01849:小时值必须介于1和12之间。(因为其中的hh是12进制,没有13所以报错)
	select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss') from dual;
	3. 查询某天是星期几
	select to_char(to_date('2012-10-20','yyyy-mm-dd'),'day') strDay from dual; 
	显示结果:星期六	 
	select to_char(to_date('2012-10-20','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = English') strDay from dual;   
	显示结果:saturday
	4. 两个日期间的天数
	 select floor(sysdate - to_date('20161010','yyyymmdd')) strTime from dual; 
	--其中sysdate=2016/10/20 17:10:51
	--显示结果:10
	5. 时间为null的用法
	select to_date(null) from dual;
	6.月份差
	select  months_between(date'2014-04-23',date'2013-04-23') days from dual;

##in和exist的效率问题

1、语法: EXISTS subquery
	参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。
	结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE 。


2、效率
in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询。

##待添加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值