学习写第一篇博客--测试

第一章  Oracle 简介及安装

1.1 Oracle下载

Oracle11g32位下载:http://www.java1234.com/a/javaziliao/kfgj/2015/0817/4787.html

Oracle11g64位下载:http://www.java1234.com/a/javaziliao/kfgj/2015/0817/4786.html

HelloWorld.java

public class HelloWorld{
    public static void main(String[] agrs) {
        System.out.prinln("HelloWorld!");
    }
}

 

1.2 PLSQLDeveloper 安装

Plsqldeveloper10下载:http://www.java1234.com/a/javaziliao/kfgj/2015/0815/4776.html

Plsqldeveloper 没有开发64位版本,所以导致了64位用户没法直接连接oracle数据库

解决办法:

第一步:下载32位oracle客户端instantclient-basic-win32-10.2.0.5

下载地址:http://pan.baidu.com/s/1o6sx7n0 解压

第二步:安装plsql developer

第三步:环境变量:

① TNS_ADMIN:oracle根目录\product\11.2.0\dbhome_1\NETWORK\ADMIN

② NLS_LANG:SIMPLIFIED CHINESE_CHINA.ZHS16GBK

③ 配置plsql developer首选项;

 

1.3 Oracle11g卸载

Oracle 卸载:http://jingyan.baidu.com/article/922554468d4e6b851648f4e3.html(百度经验)

 

第二章  Oracle表及表空间

2.1 Oracle表空间

一个数据库可以有多个表空间,一个表空间里可以有多个表。表空间就是存多个表的物理空间;

可以指定表空间的大小位置等。

 

创建表空间:create tablespace ts1 datafile 'C:\tablespace\ts1.dbf' size 50M;

自动扩展大小((100M)):

create tablespace ts2 datafile 'C:\tablespace\ts2.dbf' size 1M autoextend on next 100M;

设置最大空间(1024M):

create tablespace ts3 datafile 'C:\tablespace\ts3.dbf' size 50M autoextend on next 10M maxsize 1024M;

 

修改用户默认表空间:alter database default tablespace ts1;

表空间改名:alter tablespace ts1 rename to ts2;

删除表空间:drop tablespace ts2 including contents and datafiles;

 

查看所有表空间及表空间物理存放路径:select * from dba_data_files;

 

2.2 Oracle数据库表

--Student

create table Student(

  id varchar2(32) primary key, --主键

  name varchar2(8) not null,

  age number,

)

 

--添加表注释:

comment on table Student is '学生信息';

 

--添加字段注释:

comment on column Student.id is 'id';

comment on column Student.name is '姓名';

comment on column Student.age is '年龄';

2.3 Oracle虚拟表dual表

dual表是sys用户下的一张虚表;提供一些运算和日期操作时候用到。

dual表作用:

1、查看当前用户

      select user from dual;

2、用来调用系统函数

   select to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss') from dual;--获得当前系统时间

 select sys_context('userenv','terminal') from dual;--获得主机名

 select sys_context('userenv','language') from dual;--获得当前locale

 select DBMS_RANDOM.random from dual;--获得一个随机数

3、可以用做计算器

 select 7*9*10-10 from dual;

4、查看系统时间

select sysdate from dual;

第三章  Oracle序列

3.1 序列简介

序列作为数据库里的对象,主要作用是生成唯一的主键值;

 

3.2 创建序列

create sequence序列名称;

重要属性:序列名称.currval 当前值 nextval 下一个值

指定初始值:start with xx

 

3.3 序列属性

Minvalue maxvalue 最大值和最小值 默认最小值1最大值 10的27次方;

Increment by 属性 序列增长步长 默认值1

Cycle 设置循环; (了解即可,不使用);

Cache 缓存设置; 一次获取序列的多个连续值,默认20 ,放到内存中,方便下次快速获取;

 

3.4案例:

create sequence CSG_S_ID --序列名

             minvalue 1 --最小值

             maxvalue 999999999 --最大值

             start with 1 --开始值

             increment by 1 --序列增长步长

             cache 3000 --缓存一次获取序列的多个连续值

第四章  Oracle表操作

4.1 scott用户默认表介绍

① 部门表:dept

② 雇员表:emp

③ 工资等级表:salgrade

④ 工资表:bonus

 

4.2 插入insert语句

给指定列插入数据:insert into dept(deptno,dname) values(50,'xx');

插入全部列数据:

insert into dept(deptno,dname,loc) values(60,'xx','lll'); 简写 insert into dept values(70,'xxx','llll');

 

4.3 更新update语句

更新指定数据:update dept set dname='司法部' where deptno=50;

update dept set dname='司法部' ,loc='china' where deptno=50;

 

4.4 删除delete语句

删除指定数据:delete from dept where deptno=70;

删除指定条件的数据:delete from dept where deptno>40;

 

4.5 查询select语句

查询所有:select * from emp;

指定字段查询:select ename,sal from emp;

加where条件:

select * from emp where sal>=800;

select * from emp where sal>=1500 and job='SALESMAN';

Distinct去重复记录;

Group by分组查询:select job,count(ename) as num from EMP t group by job;

Having过滤分组:select job,count(ename) as num from EMP t group by job having count(ename)>=2;

Order by 排序:select * from emp order by sal desc;

 

子查询:查询出基本工资大于平均工资的员工:select * from emp where sal>(select avg(sal) from emp)

 

联合查询:

并集(合并两个表的数据,去除重复记录):

Select * from t_user1

union

select * from t_user2;

并集:(合并两个表的数据,不去除重复记录)

Select * from t_user1

union all

select * from t_user2;

 

交集:

Select * from t_user1

intersect

select * from t_user2;

 

差集:

Select * from t_user1

minus

select * from t_user2;

 

内连接:

select * from emp t,dept d where t.deptno=d.deptno;

类似:select * from emp e inner join dept d on e.deptno=d.deptno;  inner 可以省略;

 

外连接:

左外连接:select * from emp e left join dept d on e.deptno=d.deptno;

右外连接:select * from emp e right join dept d on e.deptno=d.deptno;

 

第五章  Oracle数据类型及函数

5.1 字符串类型及函数

字符类型分3种,char(n) 、varchar(n)、varchar2(n) ;

char(n)固定长度字符串,假如长度不足n,右边空格补齐;

varchar(n)可变长度字符串,假如长度不足n,右边不会补齐;

varchar2(n)可变长度字符串,Oracle官方推荐使用,向后兼容性好;

 

char(n)和varchar2(n)区别:char(n)查询效率相对较高,varchar2(n)存储空间相对较小;

 

select length(userName) as charlength,length(password) as varchar2length from t_user3;

 

lpad() 向左补全字符串:select lpad(stuno,6,'0') from t_user3;

rpad() 向右补全字符串:select rpad(stuno,6,'0') from t_user3;

lower() 返回字符串小写:select lower(userName) from t_user3;

upper() 返回字符串大写:select upper(userName) from t_user3;

initcap() 单词首字符大写:select initcap(userName) from t_user3;

length() 返回字符串长度:select length(password) from t_user3;

substr()截取字符串:select substr(userName,1,2) from t_user3;

instr() 获取字符串出现的位置:select instr(password,'23',2,2) from t_user3;

ltrim() 删除左侧空格:select ltrim(userName) from t_user3;

rtrim() 删除右侧空格:select rtrim(userName) from t_user3;

trim() 删除两侧空格:select trim(userName) from t_user3;

concat() 串联字符串:select concat(userName,password) from t_user3;

reverse() 反转字符串:select reverse(userName) from t_user3;

5.2 数值类型及函数

number是oracle中的数据类型;number(precision,scale);

Precision,scale均可选;

Precision代表精度,sacle代表小数位的位数;Precision范围[1,38]scale范围[-84,127]

举例: 12345.678 Precision是8 scale是3;

 

常用方法:

abs()   求绝对值select abs(n1) from t_number where id=1;

round() 四舍五入select round(n1,2) from t_number where id=1;

ceil()  向上取整:select ceil(n1) from t_number where id=2;

floor   向下取整:select floor(n1) from t_number where id=2;

Mod()   取模:select mod(5,3) from dual;

Sign()  正负性:select sign(n1) from t_number where id=1;

Sqrt()  求平方根:select sqrt(9) from dual;

Power() 求乘方:select power(2,3) from dual;

Trunc() 截取:select trunc(123.456,2) from dual;

to_char() 格式化数值:常见的字符匹配有 0、9、,、$、FM、L、C

select to_char(123.45,'0000.000') from dual;

select to_char(123.45,'9999.999') from dual;

select to_char(123123,'99,999,999.99') from dual;

select to_char(123123.3,'FM99,999,999.99') from dual;

select to_char(123123.3,'$99,999,999.99') from dual;

select to_char(123123.3,'L99,999,999.99') from dual;

select to_char(123123.3,'99,999,999.99C') from dual;

5.3 日期类型及函数

Date和timestamp (时间戳)

Date包含信息century (世纪信息)year 年month 月day 日hour 小时minute 分钟 second秒

Timestamp 一般用于日期时间要求非常精确的情况,精确到毫秒级;

insert into t_date values(1,sysdate,systimestamp);

 

下面重点讲date类型的常用函数:

select sysdate from dual;

select systimestamp from dual;

 

Add_months 添加月份 select add_months(d1,2) from t_date where id=1;

Last_day 返回指定日期月份的最后一天 select last_day(d1) from t_date where id=1;

 

update t_date set d3=to_date('2016-12-20','YYYY-MM-DD') where id=1;

update t_date set d3=to_date('2016-12-20 18:31:34','YYYY-MM-DD HH24:MI:SS') where id=1;

 

Months_between 返回两个日期的相差月数 select months_between(d1,d3) from t_date where id=1;

next_day 返回特定日期之后的一周内的日期:select next_day(d1,2) from t_date where id=1;

Trunc 截取日期:

select trunc(d1,'YYYY') from t_date where id=1;

select trunc(d1,'MM') from t_date where id=1;

select trunc(d1,'DD') from t_date where id=1;

select trunc(d1,'HH') from t_date where id=1;

select trunc(d1,'MI') from t_date where id=1; 

Extract 返回日期的某个域:

select extract(year from sysdate) from dual;

select extract(month from sysdate) from dual;

select extract(day from sysdate) from dual;

select extract(Hour from systimestamp) from dual;

select extract(minute from systimestamp) from dual;

select extract(second from systimestamp) from dual;

To_char将日期转换成字符串:

select to_char(d1,'YYYY-MM-DD') from t_date where id=1;

select to_char(d1,'YYYY-MM-DD HH24:MI:SS') from t_date where id=1;

5.4 其他常用处理函数

常用的聚合函数:

Max 求最大值:select max(sal) from emp ;

Min 求最小值:select min(sal) from emp ;

Avg 求平均值:select avg(sal) from emp ;

Sum 求和:select sum(sal) from emp ;

Count 统计记录数:select count(ename) from emp ;

 

nvl 空值处理:select ename,nvl(e.sal, 0) from emp e;

 

decode 判断函数:如果t.dlzh=nap 返回系统管理员,否则返回普通用户

select decode(t.dlzh, 'nap', '系统管理员', '普通用户'),  t.* from xt_ry t;

 

replace 替换函数:将t.username列,包含有a的值替换成BB

select replace(t.username, 'a', 'BB') from test t;

 

--exists

select * from kh_ydkh a where exists(select 1 from kh_jld b where b.yhbh=a.yhbh)

 

 

 

rownum

Oracle 分页:

select * from (select a.*,rownum rn from (select * from emp) A where rownum<=10) where rn>5;

 

Oracle 中的运算:

select 2+1 from dual;

select 2-1 from dual;

select 2*1 from dual;

select 2/1 from dual;

条件判断式:

Between and 范围查询:

select * from emp where sal between 900 and 1500;

select * from emp where sal>=900 and sal<=1500;

 

In 集合范围:

select ename,hiredate from emp where ename in (select distinct ename from bonus)

 

Like 模糊查询:

select * from emp where ename like '%M%'

select * from emp where ename like 'M%'

select * from emp where ename like '_M%''

第六章  Oracle视图

6.1 视图简介

视图是虚表,没有具体物理数据,是通过实体表的一种计算映射逻辑。主要就是为了方便和数据安全;

6.2 创建视图

Create view 视图名称 as 查询语句

Create view v_emp1 as select ename,job from emp;

6.3 修改视图

 

6.4 删除视图

 

6.5 使用视图

查询:select * from v_emp1; select * from v_emp1 where ename like '%M%';

修改:update v_emp1 set job='销售' where ename='sb';

添加:insert into v_emp2 values('2222','sb2','技术');

删除:delete from v_emp2 where empno=2222;

6.6 只读视图

Create view 视图名称 as 查询语句 with read only ;

第七章  Oracle约束

7.1 主键约束

 

7.2 外键约束

 

7.3 唯一性约束

7.4 检查约束

 

7.5 默认值约束

 

7.6 非空约束

第八章  Oracle控制语句

8.1 IF条件语句

 

8.2 CASEWHEN流程控制语句

 

8.3 循环语句

① 无条件循环loop

② while 循环

③ for 循环

第九章  Oracle游标

9.1 游标简介

使用游标,我们可以对具体操作数据,比如查询的结果,对行,列数据进行更加细致的处理。以及对其他DML操作进行判断等操作;

 

9.2 显示游标

 

9.3 隐式游标

隐式游标的属性   返回值类型 意   义

SQL%ROWCOUNT 整型 代表DML语句成功执行的数据行数

SQL%FOUND 布尔型 值为TRUE代表插入、删除、更新或单行查询操作成功

SQL%NOTFOUND 布尔型 与SQL%FOUND属性返回值相反

SQL%ISOPEN 布尔型 DML执行过程中为真,结束后为假

 

9.4 动态游标

强类型动态游标

弱类型动态游标

第十章  Oracle触发器

10.1 触发器简介

具备某些条件,由数据库自动执行的一些DML操作行为。

 

10.2 语句触发器

语句触发器针对整个表,作用整个表操作;

语法结构:

Create trigger 触发器名称

Before/after 触发动作

On 作用对象

 

触发器谓词:INSERTING、UPDATING、DELETING

 

10.3 行触发器

行触发器针对行记录。

语法结构:

Create trigger 触发器名称

Before/after 触发动作

For each row

On 作用对象

 

触发器内置变量 :old  :new

 

10.4 触发器禁用和开启

禁用触发器: alter trigger 触发器名称disable

启用触发器: alter trigger 触发器名称enable

第十一章  Oracle函数与存储过程

11.1 Oracle自定义函数

语法:

Create function 函数名称return 返回值类型as

Begin

End 函数名称;

 

11.2 Oracle存储过程

存储过程是存储在数据库中提供所有用户程序调用的子程序定义存储过程的关键字为procedure

 

语法:

 

示例一无参无返

create or replace procedure p1

--or replace代表创建该存储过程时若存储名存在则替换原存储过程重新创建

--无参数列表时,不需要写()

as

begin

  dbms_output.put_line('hello world');

end;

 

--执行存储过程方式1

set serveroutput on;

begin

  p1();

end;

--执行存储过程方式2

set serveroutput on;

execute p1();

 

示例二:有参有返

create or replace procedure p2

(name in varchar2,age int,msg out varchar2)

--参数列表中,声明变量类型时切记不能写大小,只写类型名即可,例如参数列表中的name变量的声明

--参数列表中,输入参数用in表示,输出参数用out表示,不写时默认为输入参数。

------------输入参数不能携带值出去,输出参数不能携带值进来,当既想携带值进来,又想携带值出去,可以用in out

as

begin

  msg:='姓名'||name||',年龄'||age;

  --赋值时除了可以使用:=,还可以用into来实现

  --上面子句等价于select '姓名'||name||',年龄'||age into msg from dual;

end;

--执行存储过程

set serveroutput on;

declare

  msg varchar2(100);

begin

  p2('张三',23,msg);

  dbms_output.put_line(msg);

end;

 

示例三:参数列表中有in out参数

create or replace procedure p3

(msg in out varchar2)

--当既想携带值进来,又想携带值出去,可以用in out

as

begin

  dbms_output.put_line(msg); --输出的为携带进来的值

  msg:='我是从存储过程中携带出来的值';

end;

 

--执行存储过程

set serveroutput on;

declare

  msg varchar2(100):='我是从携带进去的值';

begin

  p3(msg);

  dbms_output.put_line(msg);

end;

 

 

 

11.3 程序包

引入的目的,是为了有效的管理函数和存储过程,当项目模块很多的时候,用程序包管理就很有效了。

语法:

Create or replace package 包名 as

变量名称1数据类型1;

变量名称2 数据类型2;

...

...

Function 函数名称1(参数列表) return 数据类型1;

Function 函数名称2(参数列表) return 数据类型2;

...

...

Procedure 存储过程名称1(参数列表);

Procedure 存储过程名称2(参数列表);

...

...

End 包名;

第十二章  Oracle用户角色和权限

12.1 Oracle用户

Oracle用户分两种一种是系统用户 syssystem ;另外一种是普通用户

视图dba_users 存储着所有用户信息;

--创建用户create user 用户名 identified by 密码 default tablespace 表空间

create user user1 identified by 123 default tablespace USERS

--授予 session 权限

grant create session to user1

--锁定帐号

alter user scott account lock;

--解锁账号

alter user scott account unlock;

--修改密码

alter user scott identified by 123;

--删除用户

drop user user1 cascade;删除用户,并且把用户下的对象删除,比如表,视图,触发器等

--查看用户所属的默认表空间、用户名的状态

select u.username, u.default_tablespace, u.account_status from dba_users u

12.2 Oracle权限

Oracle权限分为系统权限和对象权限;

系统权限是Oracle内置的,与具体对象无关的权限,比如创建表的权限,连接数据库权限;

对象权限就是对具体对象,比如表,视图,触发器等的操作权限;

 

--系统权限表:system_privilege_map

select * from system_privilege_map

--权限分配视图:dba_sys_privs

select * from dba_sys_privs

--查看DBA角色拥有哪些权限

select * from dba_sys_privs where grantee = 'DBA'

回收系统权限:revoke 权限 from 用户

 

对象权限分配

用户表权限视图:dba_tab_privs

给对象授权: grant 权限 on 对象 to 用户 with grant option;

 

回收权限:revoke 对象权限 on 对象 from 用户;

12.3 Oracle角色

角色是权限的集合;可以给用户直接分配角色,不需要一个一个分配权限;

语法:

--创建角色

create role 角色名称;

--查看所有角色信息

select * from dba_roles;

--查看用户的角色信息

select * from dba_role_privs;

--查看 Scott 用户拥有哪些角色

select * from dba_role_privs rp where rp.grantee='SCOTT';

--查看 scott 用户拥有哪些表(通过所有者owner查询)

select * from dba_tables t where t.owner='SCOTT'

--查看当前登录的用户拥有哪些表

select * from user_tables;

第十三章  Oracle备份与恢复

一、创建逻辑目录

该命令不会在操作系统创建真正的目录,最好以system等管理员创建。

create directory exp_dir as 'e:\dmp';

删除逻辑目录:drop directory exp_dir;

 

二、查看管理理员目录

同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)

select * from dba_directories;

 

三、给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。

grant read,write on directory expdir to scott;

 

 四、导出数据(备份)

1)按用户导

    expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

 

2)并行进程parallel

    expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3

 

3)按表名导

    expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;

 

4)按查询条件导

    expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';

 

5)按表空间导

    expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;

 

6)导整个数据库

expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;

 

五、导入数据(还原)

1)导到指定用户下

    impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;

 

2)改变表的owner

    impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;

 

3)导入表空间

    impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;

 

4)导入数据库

    impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;

 

5)追加数据

impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system

TABLE_EXISTS_ACTION

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值