视图 : 虚表
--语法结构 : create view 视图名 as 子查询
--创建emp表的视图
create view empname
as
select ename from emp
--对视图进行操作需要赋予权限,要使用管理员用户操作
--赋予权限,为scott用户解锁创建视图权限
grant create view to scott
select * from empname
--创建一个视图,emp表中20部门的信息
create view emp10
as
select * from emp where deptno = 10
select * from emp10
select * from emp10t
--视图与表的区别
--1、创建一个视图,视图修改,源表修改 ;源表修改,视图也修改
--2、创建的表是独立的,表修改,源表不修改;源表修改,表不修改
create table emp10t
as
select * from emp where deptno = 10
update emp set deptno = 10 where empno = 9527
update emp10 set ename = 'heihei' where empno = 9527
select * from emp10
--覆盖
create or replace view emp10
as
select ename from emp where deptno=10
--字段别名
create or replace view emp10
as
select sal*12 annsal from emp where deptno=10
select * from emp10
--不允许违反条件
create or replace view emp10
as
select * from emp where deptno=10
with check option
update emp10 set deptno =20 --with check option where 子句违反
where empno=9527
--只读
create or replace view emp10
as
select * from emp where deptno=10
with read only
select * FROM EMP10
多表关联视图
create or replace view stu10
as
select s.scode,s.sname,c.cno,c.cname,t.tno,t.name1,t.name2
from student s
inner join calss c
on(s.cno=c.cno)
inner join test t
on(c.tno=t.tno)
--学生表、班级表、课程表关联
create or replace view emp20
as
select s.scode,s.sname,s.sbirthday,s.ssex,c.cno,c.cname,t.tno,t.name1,t.name2 from student s inner join calss c
on(s.cno = c.cno) inner join test t
on(c.tno = t.tno)
--删除视图
--drop view 视图名
drop view stu10
序列:一组有顺序的数列
--表 有主键 利用序列生成有顺序的不重复的主键进行插入 5.6.7....
--生成一个序列,要求从1001开始,每次增加1,没有最大值,不循环
--每次缓存10个序列值
create sequence seq_student
--序列的起始数
start with 1001
--设置每次增加1
increment by 1
--没有最大值
nomaxvalue
--没有最小值
nominvalue
--不循环
nocycle
--缓存10个
cache 10
--通过两个方法来使用
--1、nextval :下一个值
select seq_student.nextval
from dual
--2、currval :当前值
select seq_student.currval
from dual
--序列在什么地方用 ?
--向表中插入数据
insert into student values (seq_student.nextval,'feier',sysdate,168,'女',2)
select * from student
--序列的应用范围 :
--表、视图、insert values( ) 、update set
索引
select * from emp
--给学生表中的名字添加索引 :
create index ind_student_sname on student(sname)
--索引的优点:
--提高执行查询的速度 -> 先排序,后折半查找
--索引的缺点:数据量小的时候,应用索引会降低查询速度
过程:存储过程
--建立和管理过程 : 语法结构 procedure:过程关键字
--create or replace procedure 过程名(参数1,参数2|null) is|as 声明部分:变量名字 变量类型 ;begin sql语句部分; 输出部分 ;end ;
--创建输出系统时间过程
--不需要传入任何参数的过程 - 无参数过程
create or replace procedure print_sysdate is var_date date;
begin
select sysdate into var_date from dual;
dbms_output.put_line(to_char(var_date,'yyyy-mm-dd'));
end print_sysdate;
--在命令窗口中
SQL> set serveroutput on; --设置输出功能开启
SQL> execute print_sysdate; --执行过程
2016-03-25
PL/SQL 过程成功完成
SQL> exec print_sysdate; --执行单词简写
2016-03-25
PL/SQL 过程成功完成
SQL> call print_sysdate;
call print_sysdate
ORA-06576: 不是有效的函数或过程名
--call :是放到缓存中执行,用于JDBC调用过程
--用于java程序中,虚拟机调用过程的关键字
--有参数过程
--调用过程的时候需要传入参数
--根据员工的员工编号查询员工名字
create or replace procedure print_ename(v_empno number) is v_ename emp.ename%type;
begin
select ename into v_ename from emp where empno = v_empno;
dbms_output.put_line(v_ename);
end;
过程与表与视图
--输出参数 --按位置传递参数
create or replace procedure print_ename(v_empno in number,v_ename out varchar) is
begin
select ename into v_ename from emp where empno = v_empno;
dbms_output.put_line(v_ename);
end;
SQL> variable v_name varchar2(20); --创建临时变量 命名为v_name
SQL> exec print_ename(9527,:v_name); --在输出参数前加上 : 冒号
HUAAN
PL/SQL 过程成功完成
v_name
---------
HUAAN
--输入输出参数
create or replace procedure get_job(var_param in out varchar) is
begin
select job into var_param from emp where ename = var_param;
dbms_output.put_line(var_param);
end;
SQL> var v_var varchar2(20);
SQL> exec :v_var := 'SCOTT';
PL/SQL 过程成功完成
v_var
---------
SCOTT
SQL> exec get_job(:v_var);
ANALYST
PL/SQL 过程成功完成
v_var
---------
ANALYST
--按名称传递参数
create or replace procedure get_sal(v_empno number,v_ename varchar2,v_sal out number) is
begin
select sal into v_sal from emp where empno = v_empno and ename = v_ename;
dbms_output.put_line(v_sal);
end;
SQL> var v_sal number;
SQL> exec get_sal(v_ename=>'SCOTT',v_empno=>'7788',v_sal=>:v_sal);
3000
PL/SQL 过程成功完成
v_sal
---------
3000
--混合传递
SQL> exec get_sal(7788,v_ename=>'SCOTT',v_sal=>:v_sal);
3000
PL/SQL 过程成功完成
v_sal
---------
3000
--混合传递注意的地方:
--1、必须先按位置传递,再按名称传递,如果先按名称传递,则其后不能再继续按位置传递
SQL> exec get_sal(7788,v_ename=>'SCOTT',:v_sal);
begin get_sal(7788,v_ename=>'SCOTT',:v_sal); end;
ORA-06550: 第 1 行, 第 37 列:
PLS-00312: 一个定位相关参数没有说明其相关性
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
--drop procedure 过程名
drop procedure get_sal
purge recyclebin;清空回收站