oracle数据字典.docx
- 文档编号:23780892
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:17
- 大小:20.07KB
oracle数据字典.docx
《oracle数据字典.docx》由会员分享,可在线阅读,更多相关《oracle数据字典.docx(17页珍藏版)》请在冰豆网上搜索。
oracle数据字典
1,数据字典
1-1、用户
--查看当前用户的缺省表空间
select username,default_tablespace from user_users;
--查看当前用户的角色
select * from user_role_privs;
--查看当前用户的系统权限和表级权限
select * from user_sys_privs;
select * from user_tab_privs;
--显示当前会话所具有的权限
select * from session_privs;
--显示指定用户所具有的系统权限
select * from dba_sys_privs where grantee='GAME';
--显示特权用户
select * from v$pwfile_users;
--查看用户下所有的表
select * from user_tables;
--查看用户下所有的表的列属性
select * from USER_TAB_COLUMNS where table_name=:
table_Name;
--显示用户信息(所属表空间,用户名区分大小写)
select default_tablespace,temporary_tablespace
from dba_users where username='SCOTT';
--显示用户的PROFILE
select profile from dba_users where username='SCOTT';
1-2,表
--查看用户下所有的表
select * from user_tables;
--查看名称包含log字符的表
select object_name,object_id from user_objects
where instr(object_name,'LOG')>0;
--查看某表的创建时间
select object_name,created from user_objectswhere object_name=upper('&table_name');
--查看某表的大小
select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&table_name');
--查看放在Oracle的内存区里的表
select table_name,cache from user_tables where instr(cache,'Y')>0;
1-3,索引
--查看索引个数和类别
select index_name,index_type,table_name from user_indexesorder by table_name;
--查看索引被索引的字段
select * from user_ind_columns where index_name=upper('&index_name');
--查看索引的大小
select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('&index_name');
1-4,序列号
--查看序列号,last_number是当前值
select * from user_sequences;
1-5,视图
--查看视图的名称
select view_name from user_views;
--查看创建视图的select语句
set view_name,text_length from user_views;
set long 2000;说明:
可以根据视图的text_length值设定set long 的大小
select text from user_views where view_name=upper('&view_name');
1-6,同义词
--查看同义词的名称
select * from user_synonyms;
1-7,约束条件
--查看某表的约束条件
select constraint_name,constraint_type,search_condition,r_constraint_name
from user_constraints where table_name=upper('&table_name');
select c.constraint_name,c.constraint_type,cc.column_name
from user_constraintsc,user_cons_columnscc
where c.owner=upper('&table_owner') and c.table_name=upper('&table_name')
and c.owner=cc.owner and c.constraint_name=cc.constraint_name
order by cc.position;
1-8,存储函数和过程
--查看函数和过程的状态
select object_name,status from user_objects where object_type='FUNCTION';
select object_name,status from user_objects where object_type='PROCEDURE';
--查看函数和过程的源代码
select text from all_source where owner=user and name=upper('&plsql_name');
第二部分实例用户中
1,实例中的用户
--Nomal普通的用户角色
--sysdba超级用户管理员
--syspoer系统管理员
--sys网络管理员用户,具有最高的数据库管理权限,可以创建数据库
--system本地管理员角色,具有权限仅次于sys的最高的数据库管理权限,不可以创建数据库
--scott普通用户,默认的权限是锁住的,需要自己打开
---------------------------------
---syssystemscott都是默认的用户,我们也可以自己创建用户去连接数据库,但是没有任何权限,需要dba给予权限
---表空间:
包含表视图索引
---段:
包含数据段索引段
---数据块:
数据块是最小的逻辑存储单元
2创建表
2.1创建表
create table tb_user(
stu_num int primary key,
stu_name varchar2(20) not null,
stu_sex char(4) default('男') check (stu_sex in('男','女')),
stu_birthday date
);
2.2查询表
--查看表的存储信息
select * from user_tables where table_name='TB_USER';
--查看表的相关信息(属性类型和长度)
select * from user_tab_columns where table_name='TB_USER';
2.3添加信息
insert into tb_user(stu_num,stu_name) values('1001','a');
insert into tb_user(stu_num,stu_name,stu_sex) values('1002','b','女');
insert into tb_user(stu_num,stu_name,stu_sex,stu_birthday)values(to_number('1003'),'c','男',to_date('1997-02-03','yyyy-mm-dd'));
select * from tb_user;
2.4删除表
droptable tb_user;
3数据类型
--标量类型
--数值型:
number(integer,float)
--字符型:
char(2000)varchar(4000)long(2G)
--日期型:
datetimestamp(不推荐)
--大字段LOB:
BLOBCLOB
--属性类型
--%type
--%rowtype
4创建视图
视图:
(1)查询不会影响基表
(2)增删改视图的时候,更新的相应信息同时也会更新基表的对应信息
(3)删除视图基表还存在不会影响
select * from tb_user;
4-1创建视图
create view v_user as select * from tb_user;
4-2查询视图
select * from v_user;
4-3删除视图
drop view v_user;
4-4添加视图数据
insert into v_user(stu_num,stu_name,stu_sex,STU_BIRTHDAY) values(1005,'甘小娟','女',to_date('1993-5-6','yyyy-mm-dd'));
insert into v_user(stu_num,stu_name,stu_sex,STU_BIRTHDAY) values(1009,'甘娟','女',sysdate);
4-5删除视图内容
delete from v_user where stu_num=100;
4-6修改视图内容
update v_user set stu_name='大话单' where stu_num=1002;
5索引
--创建索引针对表中的某一个经常用的字段
---在查询的时间会自动调用,会使查询的速度加快
5-1创建索引index
语法:
createindex索引名on表名(索引字段)
create index index_emp_sal on emp(sal);
---根据索引字段查询,在查询时索引是自动调用的
select * from emp where sal between 1000 and 2000;
5-2删除索引
drop index index_emp_sal;
6同义词synonym
--创建同义词:
对同义词的操作会影响到原表synonym
--给emp创建同义词e,e就可以代表emp
create synonym e for emp;
--e=emp意思相同
select * from e;
update e set sal=801 where ename='SMITH';
--删除同义词
drop synonym e;
7连接
7-1等值连接
select * from emp,dept where emp.deptno=dept.deptno order by empno;
select emp.*,dname,loc from emp,dept where emp.deptno=dept.deptnoorder by empno;
7-2右连接--(+)在左边
打印了没有员工的部门(+)在左边的为右连接,在右边的为左连接
select emp.*,dname,loc from emp,dept where emp.deptno(+)=dept.deptnoorder by empno;
7-3左连接 --(+)在右边
select emp.*,dname,loc from dept,emp where emp.deptno=dept.deptno(+)order by empno;
7-4用union连接
--结果集的操作union的左边和右边查询的结果在一个表中,但是两边显示的结果的个数和类型要一样
select empno,ename from emp union select deptno,dname from dept;
8PL/SQL代码快
代码块:
描述一个过程里面包含一个语句
语法:
declare
声明部分
begin
业务逻辑处理
exception
异常处理部分
end
注释:
在声明部分定义我们需要使用的变量,不用在每个变量前使用'declare'来声明,变量名不用使用'@'符号
8-1,块的举例
declare
num number(5);--定义的两个变量
str varchar2(50);
m number:
=10;--在变量声明的部分给变量初始值
tsal number;
begin
--给变量赋值
str:
='王向新是个大逗比.....';
--通过select语句给多个变量赋值
select count(*),sum(sal) into num,tsal from emp;
dbms_output.put_line(num||'人的总工资为:
'||tsal);
--into是给变量赋值
--selectcount(*)intonumfromemp;
--把值打印出来,在上面的Output看结果
--在PL/SQL中字符串拼接用'||'
num:
=num+m;
dbms_output.put_line(num||str||m||'--->' ||tsal);
end;
--查询员工的数量,如果数量大于5就打印'哈哈'否则打印'呵呵'
declare
num number;
begin
select count(*)into num from emp where sal>3000;
if(num>5)then
dbms_output.put_line('员工的数量为:
'||num);
dbms_output.put_line('哈哈');
else
dbms_output.put_line('员工的数量为:
'||num);
dbms_output.put_line('呵呵');
end if;
end;
--------------------------
declare
num number;
begin
select count(*)into num from emp where sal>3000;
if(num>5)then
dbms_output.put_line('@@@@@员工的数量为:
'||num);
dbms_output.put_line('哈哈');
else
if(num>3)then
dbms_output.put_line('%%%%%%%%%%员工的数量为:
'||num);
dbms_output.put_line('呵呵');
else
dbms_output.put_line('&&&&&&&&&&&员工的数量为:
'||num);
dbms_output.put_line('嘻嘻');
end if;
end if;
end;
8-2连续if选择
declare
esal number;
begin
--查询SMITM的工资赋值给esal
select sal into esal from emp where ename='SMITH';
if(esal<1000)then
dbms_output.put_line('小伙子,要努力啊');
end if;
if(esal>1000 and esal<=2000)then
dbms_output.put_line('小伙子,继续努力啊');
end if;
if(esal>2000 and esal<=3000)then
dbms_output.put_line('小伙子,还不错');
end if;
if(esal>3000 and esal<=4000)then
dbms_output.put_line('小伙子,很牛啊');
end if;
if(esal>4000 and esal<=5000)then
dbms_output.put_line('土豪啊,我们做朋友吧');
end if;
if(esal>5000)then
dbms_output.put_line('有钱的任性,没钱的认命');
end if;
end;
--------------------------------------------
8-3if....elsif...选择
declare
esal number;
begin
--查询SMITM的工资赋值给esal*************
select sal into esal from emp where ename='SMITH';
if(esal>2000)then
dbms_output.put_line('小伙子,要努力啊');
elsif(esal>1000 and esal<=2000)then
dbms_output.put_line('小伙子,继续努力啊');
elsif(esal<=1000)then
dbms_output.put_line('小伙子,要努力啊');
end if;
end;
----------------------------------
8-4case....when选择
declare
esal number;
str varchar2(40);
n int;
m number;
name varchar2(20);
begin
name:
='&请输入员工姓名';--弹出窗口输入
--将Scott的工资给esal
select sal into esal from emp where ename=name;
--变量赋值
m:
=esal/1000;
n:
=esal/1000;
--esal:
=esal/1000;
if(n>m)then
n:
=n-1;
end if;
case n
when 0 then
str:
='不及格';
when 1 then
str:
='有进步';
when 2 then
str:
='还不错';
when 3 then
str:
='很牛';
when 4 then
str:
='盆友';
when 5 then
str:
='巅峰';
end case;
dbms_output.put_line(n||'-->'||str);
end;
----------------------------------
8-5LOOP循环
declare
m number;
begin
m:
=1;
loop
dbms_output.put_line('aaa-->'||m);
m:
=m+1;
exit when m=10;--当m=10的时候就退出,终止循环
end loop;
end;
---------------------------------
8-6while当什么的时候
declare
m number;
begin
m:
=1;
while m<10
loop
dbms_output.put_line('aaa-->'||m);
m:
=m+1;
end loop;
end;
8-7for相当于foreach
declare
remp%rowtype;--属性类型
begin
for r in(select * from emp)
loop
dbms_output.put_line(r.ename||'-->'||r.empno);
end loop;
end;
9异常类
--oracle中的异常分为:
系统异常(编号0~20000)和用户异常
--用户异常(编号可用20001到20999)
--系统异常:
直接由oracle数据库进行管理,当出现了系统异常,数据库会自动提示
--用户异常:
--1在声明部分声明异常
--2在代码部分出现异常通过 raise 关键字抛出异常
--3在exception部分通过when来处理异常
--4在exception部分我们可以通过raise_application_error(错误编号,'错误提示');
--也就是说将异常以系统提示的形式弹出,告知用户
--以后的oracle系统中抛出异常以后,可以通过'ORA-编号'搜索解决方案
--对异常的处理
declare
me01 exception;
me02 exception;
score number;
begin
score:
='&请输入成绩';
if(score<0)then
--抛出第一种异常,提示分数小于0不合法
rais
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 数据 字典