Oracle期末考试复习

一、sqlplus操作

1.登录:

  • cmd => sqlplus scott/tiger =>conn sys/as sysdba

2.设置:

  • set sqlprompt ShenSijie>
  • set linesize 120
  • set pagesize 20
  • set serveroutput on

3.截图:

  • win+shift+S

二、关于oracle(第二章):看实验报告

1.表空间信息:

  • 使用V$TABLESPACE视图查看表空间信息:select * from V $TABLESPACE;
  • 查看表空间dba_tablespaces属性:desc dba_tablespaces;
  • 查看表空间中所报刊的段信息:select segment_name,segment_type,extents,tablespace_name from dba_segments where tablespace_name=‘SYSTEM’;
  • 查看回滚段的名称列表:select * from V$rollname;
  • 查看回滚段的统计信息:select* from V$rollstat;
  • 查看表空间中空闲区间的信息:desc dba_free_space;

2.查看物理体系结构各部分内容:

  • 查看SGA(系统全局区)参数:show parameter sga
  • 查看PGA(程序全局区)参数:show parameter pga
  • 查看共享池大小:show parameter shared_pool_size
  • 查看数据缓冲池大小:show parameter db_cache_size
  • 查看日志缓冲区大小:show parameter log_buffer
  • 查看数据块大小:select name,value from V$parameter where name = ‘db_block_size’;(单位Byte)

3.表空间

创建表空间SSJ,同时创建一个50MB的数据文件:create tablespace SSJ datafile ‘SSJ.DBF’ size 50m;

三、关于用户管理与权限分配:(13章)

用户:

  • 创建用户:create user “user_name” identified by “user_password”;
  • 解锁用户:alter user “user_name” account unlock;
  • 修改用户密码:alter user “user_name” indentified by “new_user_password”
  • 查看用户的默认表空间和零时表空间:select default_tablespace,temporary_tablespace from dba_users where username=“user_name”;
  • 删除用户:drop user “user_name”;

角色

  • 创建角色:create role “role_name”;
  • 查看角色所拥有的权限:select * from dba_sys_peivs where grantee=‘role_name’;
  • 修改角色:
    • 授予权限:grant 权限 to “role_name”;
    • 收回权限:revoke 权限 from “role_name”;
  • 删除角色:drop role “role_name”;

课本P263:一些重要的角色
在这里插入图片描述

权限:

授予权限:grant 权限 to “role_name/user_name”;
授予用户某角色的权限:grant role_name to user_name

例题:
创建一个ssj用户,口令为123,并设置默认表空间为users,临时表空间为tempt ,并指定在默认表空间上的大小为20MB。
create user ssj identified bu 123
default tablespace users
temporary tablespace temp
quota 20m on users;

创建角色 ssj_role,并授予权限,并将ssj_role的权限 以及 create table的权限 授予ssj用户。
create role ssj_role [identified by 1234]; (可以没有密码)
grant select,update,insert,delete on emp to ssj_role;
grant ssj_role to ssj;
grant create table to ssj;

授予用户dba权限,收回dba权限,修改ssj用户的表空间大小为10m,修改密码为1234,解锁ssj用户,删除ssj用户
grant dba to ssj;
revoke dba to ssj;
alter user ssj quota 10m on users;
alter user ssj identified by 1234;
alter user ssj account unlock;
drop user ssj;

四、标准sql

1.DQL(数据查询语言)

例子一:查询员工的姓名,员工编号,工资的1.1倍,以及部门名称,要求:工资在1000跟5000之间,并且不等于1500和2000. 姓名第二个字符为A. 工作为SALESMAN和MANAGER之间一个.没有绩效.结果按照工资降序输出。
select distinct e.ename “姓名”,e.empno “员工编号”,e.sal*(1+0.1) “工资” ,d.dname “部门名称”
//数据不重复,为每一列指定列名,带有表达式的select(显示1.1倍的工资)。
from emp e,dept d
//多个表时,给予别名,写起来方便
where e.deptno=d.deptno
and e.sal> 1000 and e.sal<5000
//也可以使用 e.sal between 1000 and 5000
and e.sal<>all(1500,2000)
//<>表示“不等于”;也可表示为A!B。all表示同时满足
and e.ename like ‘_A%’
//使用like关键字查询,_A%可以表示BAccc、DAnn等
and e.job in(’SALESMAN‘,’MANAGER‘)
//in关键字,job在列出的几个之中,
and e.comm is null
//表示没有绩效,可改:is not null.同时not可用于,not between and等等
order by sal desc
//以sal降序顺序输出,升序为asc

例子二:列出每个部门的部门号以及工资在1000以上的人员个数,要求:以部门号升序输出,只输出人数大于公司部门数的部门。
select count(empno),deptno
//还有avg(sal)工资的平均数等聚合函数
from emp
where sal>1000
group by deptno
//以deptno分组查询
having count(empno)>(select count(distinct deptno) from emp)
//对分组查询结果做删选,不用where,用having
order by deptno asc;

2.DML(数据操纵语言)

insert into emp values (‘ssj’,…);
update emp set sal=1000 where deptno=10;
delete from emp where empno=1111;

3.TCL(事务控制语言)

commit
rollback

五、PL/sql

1.匿名块

declare
type emp_type is record//声明record类型变量,可以储存多列值的一行数据
(
var_no emp.empno%type;
//%type在不知道数据类型的时候使用,将
var_name varchar(10)
);
empinfo emp_type;//定义变量。注意声明和变量一个都不能少

rowemp emp%rowtype//就像%type,emp%rowtype表示可以储存一行emp表中数据的变量

begin
money =: 888888;//在匿名块中赋值要使用 “:=”

select empno,ename into empinfo from emp where empno=9999;//使用record

select * into rowemp from emp where empno=8888;//使用rowtype

exception
when zero_divide then dbms_output.put_line("…");

end;
/

2.流程控制语句

(1)选择

ifthen …;
elsifthen …;
else … ;**
end if;**

②case a
when … then …;
when … then …;
else …;
end case;

(2)循环

①loop …(循环体)
exit when…(结束条件)
end loop;

②while …(条件)
loop …(循环体)

③for i in reverse 1…100
loop …
end loop;

3.命名块

(1)游标

①显式游标

declare
cursor cur_emp(var_job in varchar2:=‘SALESMAN’) 创建游标
is select empno,ename,sal
from emp
where job=var_job;

type record_emp is record
(

);

begin
open cur_emp(‘MANAGER’); 打开游标
fetch cur_emp into emp_row; 先取一份数据
while cur_emp%found loop 当游标中还有数据
dbms_output.put_line(emp_row.var_ename||…);
fetch cur_emp into emp_row; 再去一份数据
end loop;
close cur_emp;关闭游标
end;
/

②隐式游标

for emp_record(这个名字只要是可以作为record数据名字的就行) in (select empno,ename,sal from emp where job=‘SALESMAN’)
loop …end loop;
end;

(2)存储过程

create or replace procedure ssj
(
in
out
)
is/as
declare
begin

(3)函数

create or replace function ssj( num_a number) return number is xxxxxx

avg_pay :=get_avg_pay(10);

(4)触发器

create or replace trigger trig (for each row//行级触发器)
before/after insert/delete/update
on table_name

6.表相关

建表
在这里插入图片描述
在这里插入图片描述
改表名
在这里插入图片描述
添加列在这里插入图片描述
drop table table_name;删除表
delete from table_name where …

猜你喜欢

转载自blog.csdn.net/JGxzq/article/details/117898893