一篇让Java程序猿随时可以翻看的Oracle总结

Posted 一个勤奋的胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇让Java程序猿随时可以翻看的Oracle总结相关的知识,希望对你有一定的参考价值。

来源:http://www.cnblogs.com/bzx888/p/4820712.html

有关的语句和操作基本都是按照实战中的顺序来总结的,比如创建用户,建表,序列初始化,插入数据的顺序呢。

   这篇文章的基表是大家最为熟知的Scott用户下的emp员工表,dept部门表以及salgrade薪水等级表,一切的语句都是围绕它写的。

下面来看一下Oracle中常用的操作都有哪些吧!

一.用户的有关操作。

  • 创建用户
1
create user scott identified by 123456;
  • 给用户分配权限
1
2
3
grant connect,resource to scott;
grant create view to scott;
grant create synonym to scott;
  • 撤销用户权限
1
2
3
revoke connect,resource from  scott;
revoke create view from scott;
revoke create synonym from scott;
  • 删除用户
1
drop user scott cascade;
  • 修改用户密码
1
2
3
4
5
6
7
alter user scott identified by 123456;--命令修改
 
conn scott/123456
password;--命令可视化修改1
 
connect scott/123456
password;--命令可视化修改2
  • 设置用户是否锁定
1
2
alter user scott account lock;
alter user scott account unlock;

  

二.表空间的有关操作。

  • 创建表空间
1
2
3
4
create tablespace mysapce
datafile \'D:a.ora\' size 10M--绝对路径和大小
extent management local
uniform size 1M;--每个分区的大小
  • 扩展表空间
1
2
alter tablespace mysapce
add datafile \'D:b.ora\' size 10M;
  • 为ORACLE对象指定表空间
1
2
create user space_text identified by 123456 account unlock default tablespace mysapce;
--创建表、索引也可以指定表空间;一旦指定,表空间无法修改。
  • 删除表空间
1
drop tablespace mysapce;

  

三.DDL的有关操作。

  • 表table
1
2
3
4
5
6
7
8
9
10
11
--创建员工表
  CREATE TABLE EMP(
  EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
    ENAME VARCHAR2(10),
    JOB VARCHAR2(9),
    MGR VARCHAR(10),    --上司
    HIREDATE DATE,    --入职日期
    SAL NUMBER(7,2),  --薪水
    COMM NUMBER(7,2), --津贴
    DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT
  );

  

1
2
3
4
5
6
--创建部门表
 CREATE TABLE DEPT(
 DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
   DNAME VARCHAR2(14) ,
   LOC VARCHAR2(13) --地址
 );

  

1
2
3
4
5
6
--创建工资等级表
  CREATE TABLE SALGRADE(
  GRADE NUMBER, --等级
    LOSAL NUMBER, --等级中最低的薪水
    HISAL NUMBER  --等级中最高的薪水
  );

  

  • 视图view
1
2
3
4
5
6
7
8
--为emp表的empno,ename,sal和dept表的dname和salgrade表的grade创建一个视图
  create view emp_dept_salgrade
  as
  select e.empno,e.ename,e.sal,d.dname,s.grade from
  emp e inner join dept d using(deptno)
  inner join salgrade s on e.sal between s.losal and s.hisal;
   
  select from emp_dept_salgrade;--通过视图查询
  • 序列sequence
1
2
3
4
5
6
7
8
9
10
--为员工表的EMPNO创建一个序列
  create sequence emp_empno_seq
  start with 1001
  increment by  1
  nomaxvalue
  nocycle
  cache 10;
 
  select emp_empno_seq.currval from dual;<span style="color: #008000;">查询序列的当前值</span>
  select emp_empno_seq.nextval from dual;<span style="color: #008000;">查询序列的下一个值</span>
  • 同义词synonym
1
2
3
4
5
6
--为视图emp_dept_salgrade创建同义词
  create synonym eds for  emp_dept_salgrade;
 
  select from eds;<span style="color: #008000;">通过视图的同义词来查询视图中的数据
 
 </span>
  • 触发器trigger
1
2
3
4
5
6
7
--为员工表的empno创建一个自动插入的触发器
  create or replace trigger emp_empno_tri
  before insert on emp
  for each row
  begin
    :new.empno:=emp_empno_seq.nextval;<span style="color: #008000;">--语句级(for each row)触发器里面可以:new.列名来给进行操作。</span>
  end;
  • 存储过程procedure
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--创建一个可以控制行数的乘法表的过程。
create or replace procedure nine_nine(nine_line in number)
as
begin
  for  in 1..nine_line loop
    for in 1..i loop
      dbms_output.put(i||\'*\'||j||\'=\'||i*j||\'  \');
    end loop;
      dbms_output.put_line(\'\');
  end loop;
end;
 
--调用这个乘法过程
set serveroutput on;
execute nine_nine(9);
  • 存储函数function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--创建一个求1!+2!+..+20!的值的存储函数
create or replace function one_tw
return number
as
value_sum number:=0;
value_loop number:=1;
begin
  for in 1..20 loop
    value_loop:=value_loop*i;
    value_sum:=value_sum+value_loop;
  end loop;
  return value_sum;
end;
 
select one_tw() from dual;<span style="color: #008000;">--调用函数</span>
 
<span style="color: #008000;">备注:存储函数的调用可以放在表达式的位置,即表达式在哪里成立,它就可以在哪里调用。</span>
  • 事务rollback、commit、savepoint

三.常用的结构查询。

  • 查询用户和用户的信息
1
2
select username,user_id,password,default_tablespace from dba_users;
select from dba_users;
  • 查询用户所拥有的角色
1
2
select from user_role_privs;--系统用户
select from session_roles;--普通用户
  • 查询用户的权限
1
select from user_sys_privs;普通用户和系统用户都可以
  • 查看表中列的字符长度和字节长度
1
select length(ename),lengthb(ename) from emp;
  • 查询表的相关信息
1
2
SELECT table_name, tablespace_name, temporary
FROM user_tables;
  • 查询表中列的相关信息
1
2
SELECT table_name,column_name, data_type, data_length, data_precision, data_scale
FROM user_tab_columns;
  • 对表进行重命名
1
rename student to mystudent;
  • 给表添加备注
1
comment on table student is \'我的练习\';
  • 给表中列添加备注
1
comment on column student.sno is \'学生号\';
  • 查看表和视图的备注信息
1
select from user_tab_comments where table_name=\'STUDENT\';
  • 查看表和视图中列的备注信息
1
select from user_col_comments where table_name=\'STUDENT\';
  • 查看表的结构
1
describe student;
  • 截断表
1
truncate table student;
  • 使用连接运算符
1
2
select empno||ename as employees from emp;
select concat(empno,ename) as employees from emp;
  • 查看表的约束信息
1
select from user_constraints where table_name=\'EMP\';
  • 查看列的约束信息
1
select from user_cons_columns where column_name=\'SNO\';
  • 查看序列的信息
1
select from user_sequences where sequence_name=\'EMP_EMPNO_SEQ\';
  • 查看索引的信息
1
select from user_indexes;

  

  • 查看视图的信息
1
select from user_views;
  • 查看同义词
1
select from user_synonyms;
  • 查看触发器
1
select from user_triggers;
  • 查看存储过程
1
select from user_procedures;

四.DML的有关操作。

  • 插入数据insert
1
2
3
4
5
6
7
8
9
10
11
--dept--
INSERT INTO DEPT
select 10,\'ACCOUNTING\',\'NEW YORK\' from dual
union
select 20,\'RESEARCH\',\'DALLAS\' from dual
union
select 30,\'SALES\',\'CHICAGO\' from dual
union
select 40,\'OPERATIONS\',\'BOSTON\' from dual;
commit;                                    <span style="color: #008000;">--使用Oracle中的多行插入方法,关键字union,select自己想要的数据,与dual伪表组建一个完整的结构。
</span>

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--emp--
INSERT INTO EMP(ename,job,mgr,hiredate,sal,comm,deptno)
select \'SMITH\',\'CLERK\',1009,to_date(\'17-12-1980\',\'dd-mm-yyyy\'),800,NULL,20 from dual
union
select \'ALLEN\',\'SALESMAN\',1006,to_date(\'20-2-1981\',\'dd-mm-yyyy\'),1600,300,30 from dual
union
select \'WARD\',\'SALESMAN\',1006,to_date(\'22-2-1981\',\'dd-mm-yyyy\'),1250,500,30 from dual
union
select \'JONES\',\'MANAGER\',1009,to_date(\'2-4-1981\',\'dd-mm-yyyy\'),2975,NULL,20 from dual
union
select \'MARTIN\',\'SALESMAN\',1006,to_date(\'28-9-1981\',\'dd-mm-yyyy\'),1250,1400,30 from dual
union
select \'BLAKE\',\'MANAGER\',1009,to_date(\'1-5-1981\',\'dd-mm-yyyy\'),2850,NULL,30 from dual
union
select \'CLARK\',\'MANAGER\',1009,to_date(\'9-6-1981\',\'dd-mm-yyyy\'),2450,NULL,10 from dual
union
select \'SCOTT\',\'ANALYST\',1004,to_date(\'13-10-87\',\'dd-mm-rr\')-85,3000,NULL,20 from dual
union
select \'KING\',\'PRESIDENT\',1007,to_date(\'17-11-1981\',\'dd-mm-yyyy\'),5000,NULL,10 from dual
union
select \'TURNER\',\'SALESMAN\',1006,to_date(\'8-9-1981\',\'dd-mm-yyyy\'),1500,0,30 from dual
union
select \'ADAMS\',\'CLERK\',1009,to_date(\'13-10-87\'\'dd-mm-rr\')-51,1100,NULL,20 from dual
union
select \'JAMES\',\'CLERK\',1009,to_date(\'3-12-1981\',\'dd-mm-yyyy\'),950,NULL,30 from dual
union
select \'FORD\',\'ANALYST\',1004,to_date(\'3-12-1981\',\'dd-mm-yyyy\'),3000,NULL,20 from dual
union
select \'MILLER\',\'CLERK\',1004,to_date(\'23-1-1982\',\'dd-mm-yyyy\'),1300,NULL,10 from dual;
commit;                                 <span style="color: #008000;">--这里使用了触发器emp_empno_tri来自动插入emp表的empno员工编号</span>

  

1
2
3
4
5
6
7

(c)2006-2024 SYSTEM All Rights Reserved IT常识