一、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)选择
①if …then …;
elsif … then …;
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 …