一篇让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 i in 1..nine_line loop for j 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 i 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
|
--salgrade-- INSERT INTO SALGRADE VALUES (1,700,1200); INSERT 以上是关于一篇让Java程序猿随时可以翻看的Oracle总结的主要内容,如果未能解决你的问题,请参考以下文章
一篇让你彻底解决java:无效的目标发行版: 11或其它版本 如何在二三线城市月薪过万面试100人后的经验总结!看完这篇让你至少涨薪2000 |