您的位置:首页 > 数据库 > Oracle

Oracle 基础知识

2013-07-09 11:25 225 查看
SQLDevelop

1. 查看数据库版本 : select * from v$version;

2. 查看表结构: desc TABLE_NAME

3. 查看当前连接用户: select * from v$session; (show user; 在SQLPlus中显示当前用户名)

4. 查看当前被锁定的表:

SELECT   OSUSER, machine, object_name, s.sid, s.serial#
FROM     gv$locked_object l ,
     dba_objects o,
      gv$session s
WHERE    l.object_id = o.object_id
AND l.session_id = s.sid

5. 解锁被锁定的表: alter system kill session 'sid, serial#'; (e.g: : alter system kill session '23, 4561' )

6. NVL函数,处理空值null : SELECT id, NVL(name, 'name_is_null') from STU1; -- 如果STU1表中,name字段为null, 则用name_is_null替换.

7. 查询当前用户下是否有某个表: SELECT COUNT(1) FROM USER_TABLES WHERE TABLE_NAME='STU12'; --如果存在为1, 不存在为0

8. 查询某个用户下是否有某个表: select count(1) from dba_tables where owner = 'USER_NAME' and table_name = 'TABLE_NAME';

9. 查看当前用户下是否有某个(Package/Procedure/Function) :

SELECT * FROM USER_PROCEDURES OBJECT_TYPE=' FUNCTION| PROCEDURE | PACKAGE'

10. 查看所有用户 SELECT * FROM all_users;

11. Sequence 的用法

create sequence  mysql
START WITH      1
INCREMENT  BY  1
NOMAXVALUE
NOMINVALUE
NOCYCLE     -- if CYCLE 1000 表示增长到1000之后又从1开始
NOCACHE


12. union, union all, intersect, minus 的操作

- union all  将结果集累加  (包含重复记录)
SELECT * FROM  STU1
union all
SELECT * FROM STU2
-- union     将结果集累加(去除重复)
SELECT * FROM  STU1
union
SELECT * FROM STU2

-- intersect  去结果集的: 交集
SELECT * FROM  STU1
intersect
SELECT * FROM STU2

-- minus  去结果集的: 差集 (将第一个select所得结果, 减去 所有出现在 第二select的结果)
SELECT * FROM  STU1
minus
SELECT * FROM STU2


13. oracle 数据的五种对象:别名(synonym) , 序列(Sequence), 视图(View), 索引(Index) , 族(cluser).

14. sign(num)的用法:

if num > 0, sign(num) =1;

if num =0, sign(num) =0;

if num <0 , sign(num) = -1;

15. decode 函数用法:

Usage#1:    decode( expression , search , result [, search , result]... [, default] )


select  decode(id,   1, '#1',
2, '#2',
3, '#3',
4, '#4',
'#Default NO#'),
name
from     STU1;   --  将id为1,2,3,4分别转义为#1,#2,#3,#4, 如果不是1,2,3,4则转换为 #Default NO# :


Usage#2: decode((date1 - date2) - abs(date1 - date2), 0, date2, date1) -- 比较2个中大小,返回较小的一个

Usage#3: 结合sign(num)函数,判断学生成绩 >=80 为优秀, 60<= score <80 为良好, socre < 60 为不及格

select  id, name ,score, decode(sign(score-80), 1 , '优秀', 0, '优秀', -1,
decode(sign(score-60), 1, '良好', 0, '良好', -1 ,'不及格') )
from STU1;


16. trunc( number, [ decimal_places ] ) 用法(decimal_places必须为>=0的整数,将number后面多余的位数抹掉,不足的位数,保留原有的摸样)

trunc(125.815)        would return 125
trunc(125.815, 0)     would return 125
trunc(125.815, 1)     would return 125.8
trunc(125.815, 2)     would return 125.81
trunc(125.81, 3)      would return 125.81
trunc(-125.815, 2)    would return -125.81
trunc(125.815, -1)    would return 120
trunc(125.815, -2)    would return 100
trunc(125.81, -3)     would return 0

如果decimal_places 大于number 本身的小数位数,返回原数字不会加0.
如:trunc(125.81,3) would return 125.81;
如果decimal_places 为负数,那么将指定的位数设置为0


17. 查询哪些用户连接到数据库了,并且他们的IP地址分别是什么?

17-1. 缺省从 v$session 中不能直接获得客户端 IP,可以在数据库中创建一个追踪客户端IP地址的触发器:

create or replace trigger on_logon_trigger after logon on database
begin
dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));
end;


17-2. 退出之后,当用户重新登录时,可以查看IP地址

select sid,serial#,username,program,machine,client_info
from   v$session
where  username is not null
order   by username,program,machine;


18. SYSTEM 用户忘记密码

D:\oracle\product\11.2.0\dbhome_1\BIN>sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 7月 25 14:35:36 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

SQL> conn /as sysdba
已连接。
SQL> alter user SYSTEM identified by  新密码;

用户已更改。

SQL> exit


19. 复制表

ORACLE 如果表不存在:

只复制表结构:create table T_COLUMN_BK as select * from T_COLUMN WHERE 1<>1; //如果只是复制部分字段,可以用具体的字段列表代替 *
表结构+数据: create table T_COLUMN_BK as select * from T_COLUMN ;           //如果只是复制部分字段,可以用具体的字段列表代替 *

ORACLE 如果表已经存在:
复制表数据: INSERT INTO  T_COLUMN_BK   SELECT  *  FROM  T_COLUMN


20. 查询当前数据库实例名称: SELECT instance_name FROM v$instance; 

21, 查询当前数据库名称: SELECT name FROM v$database;

默认情况下,数据库实例名称和数据库名称相同。

22. NVL() 函数的使用

-- NVL(expr1, expr2) if expr1==null, return expr2; e.g: NVL(null, 'aa' ) ---> aa ;

if expr1 != null, return expr1; e.g : NVL('xx', 'aa' )----> xx

-- NVL2(expr, expr1, expr2) if expr == null, return expr2; e.g: NVL2(null, 'aa', 'bb') ----->bb

if expr != null, return expr1; e.g: NVL2('xxx', 'aa', 'bb') ---->aa
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: