oracle学习(使用了PL/SQL)——1

虽然之前学过SQL server,但学Oracle时还是感觉到很大的不同,由于视频讲课的时间短,5天左右,感觉自己学的有一些糊涂,在这里整理下思路:
1.Oracle简介
百度一大堆,这里不废话,只列出了oracle的特点:
1、完整的数据管理功能:
1)数据的大量性
2)数据的保存的持久性
3)数据的共享性
4)数据的可靠性
2、完备关系的产品:
1)信息准则—关系型DBMS的所有信息都应在逻辑上用一种方法,即表中的值显式地表示;
2)保证访问的准则
3)视图更新准则—只要形成视图的表中的数据变化了,相应的视图中的数据同时变化
4)数据物理性和逻辑性独立准则
3、分布式处理功能:
ORACLE数据库自第5版起就提供了分布式处理能力,到第7版就有比较完善的分布式数据库功能了,一个ORACLE分布式数据库由oraclerdbms、sql*Net、SQL*CONNECT和其他非ORACLE的关系型产品构成。
4、用ORACLE能轻松的实现数据仓库的操作。
这是一个技术发展的趋势,不在这里讨论。
优点
■ 可用性强
■ 可扩展性强
■ 数据安全性强
■ 稳定性强
2.oracle数据基本类型
2.1字符类型
1. char 固定长度,最大长度为200字节.
2. varcahr2 动态长度 最大长度为4000字节
2.2数字类型
1.Number 表示整形,使用整形整形最好声明长度,例如number(3)
2.Number 浮点型,类似于SQL server中的decimal(8,3),这里一样 number(8,3),总长度为8位,小数点后为三位。
2.3日期类型
1.Date 长度为7个字节,分别表示世纪、年、月、天、时、分、秒
2.Timestamp 如上,不过秒可以精确到小数点后6位
2.4大对象类型
1.clob 最大容量4G,可以直接存储文字
2.blob 以二进制的方式进行存储,一般用来存储图片,视频,音频等,不过最好先将文件转为二进制再存储进去(此段百度到的);
3.DML,DDL,DCL
1.DML:数据库操作语言:用于检索或者修改数据
①select ②inser ③update ④delete
2.DDL 数据库定义语言:用于定于数据的结构,比如说创建
①create table ② alter table ③drop table ④ create index ⑤drop index ⑥create。。。等创建语句
3.DCL: 数据控制语言: 用于定义数据库的权限
①alter password… ②grant(给某用户设置某权限)③revoke(移除某用户的某权限)④create synonym(创建同义词)
4.关于权限的查询语句
– 确定角色的权限
1.select * from role_tab_privs ; 包含了授予角色的对象权限
2.select * from role_role_privs ; 包含了授予另一角色的角色
3.select * from role_sys_privs ; 包含了授予角色的系统权限

– 确定用户帐户所授予的权限
1.select * from DBA_tab_privs ; 直接授予用户帐户的对象权限
2.select * from DBA_role_privs ; 授予用户帐户的角色
3.select * from DBA_sys_privs ; 授予用户帐户的系统权限

–其他查询
1.~user_all_tables; 查询用户变空间
2.~user_source; 查询所有资源(触发器,函数,过程等)
3.~all_users;查询所有用户
4.~v$session; 查询当前连接用户
5.~session_privs; 查询当前用户权限
6.~user_procedures;查询当前用户下所有存储过程
7.~user_triggers;查询当前用户下所有触发器

5.创建语句
1.创建表空间

create tablespace my_tablespace
datafile 'd:/myOracle/myFirstSpace.dbf' --指定表空间存储位置
size 10m                    --初始表空间大小
autoextend on next 10m maxsize unlimited;       --当超过表空间初始大小时表空间自动增长10m,无上限

2.删除表空间

drop tablespace my_tablespace including contents and datafiles  

3.给用户分配表空间

alter user 用户名 quota unlimited on 表空间;alter user 用户名 quota *M(这里为大小) on 表空间; 

4.解锁用户及更新用户密码(用system用户或sys用户)

alter suer scott account unlock;--解锁用户
alter user scott identified by 123456;--更改用户密码 

5.创建表

create table table_name(
    .......(oracle中SQL server中的自增序列)
);

6.创建序列(是一个命名的顺序编号生成器,它能以串行的方式生成一系列顺序整数。插入序列时需要)

create sequence tb_user_emp
increment by 1--设置增量
start with 1    --开始值
[minvalue 1] --设置最小指
[maxvalue | nomaxvalue] --设置最大值 | 没有最大值
[cache 10 |  nocache][cycle|no chycle] ;    [设置缓存数量(最好设置一下)  |  无缓存] [到达最大值循环|不循环]
[order|noorder]  --一般用不到
--注:保证序列号按请求顺序产生。如果想以序列号作为timestamp(时间戳)类型的话,可以采用该选项。
例如双CPU对同一个表dept中的deptNO申请序号时, 这时就有两个请求A和B,假设A请求在前B在后, 现在dept序列中deptNO的值为3。 如果添加了ORDER选项,那么一定是A请求到3, B请求到4。但如果没有添加此选项,则有可能B请求到4, A请求到3。

select tb_user_emp.nextval from dual;查看自增序列的下一个值
select tb_user_emp.currval from dual;查看自增序列的当前值
insert into dept values(tb_user_emp.nextval,'aaa','bbb');

7.创建触发器(当对某个表进行操作时,满足了触发器的条件时自动触发begin中的语句)

create or replace trigger tri_emp
before|after    --触发时间  
insert or update or delete --触发事件
on emp  --制定操作表
begin
    if to_char(sysdate,'day') in ('星期一','星期四') then
        raise_application_error(-20010,'星期一和星期四不能对表emp进行操作')
    end if;
end if;

8.利用触发器和自增序列实现插入数据时某列自增

create or replace trigger trg_user
before
    insert on dept for each row 
begin
    select tb_user_emp.nextval into:new.deptno from dual;
end;

insert into dept(dname,loc) values('aaaa','bbbb');

转载请注明出处:http://blog.csdn.net/sinat_30035833/article/details/78376135

猜你喜欢

转载自blog.csdn.net/sinat_30035833/article/details/78376135