Oracle进阶

1 视图

----视图的概念: 视图就是提供一个查询的窗口,所有数据来自原表

 

----查询语句创建表

create table emp as select * from scoot.emp;

select * from emp;

----创建视图[必须有dba权限]

create view v_emp as select ename,job from emp;

----查询视图

select * from v_emp;

----修改视图[不推荐]

update v_emp set job='CLERK' where ename='ALLEN';

commit;

创建只读视图

----视图的作用

-----第一:视图可以屏蔽掉一些敏感字段

----第二: 保证总部和分部的数据及时统一

2 索引

--索引概念: 索引就是在表的列上构建一个二叉树

---- 达到大幅度提高查询效率的目的.但是索引会影响增删改的效率

----单列索引

----创建单列索引

create index idx_ename on emp(ename);

----单行索引触发规则,条件必须是索引列中的原始值

----单行函数.模糊查询,都会影响索引的触发

select * from emp where ename='scoot';

----复合索引

 

3 pl/sql 编程语言

 

 

 

 

4 ,pl/sql中的if判断语句

 

5 pl/sql中的循环

while循环

exit循环

for循环

 

6 pl/sql中的游标

 

 

7 存储过程

给指定员工涨100块钱
create or replace  procedure p1(eno emp.empno%type)
is

begin
   update emp set sal = sal + 100 where empno = eno;
   commit;
end;

 

8 存储函数

通过存储函数实现计算指定员工的年薪
create or replace function f_yearsal(eno emp.empno%type) return number
is
    s number(10);
begin
    select sal*12+nvl(comm,0) into s from emp where empno = eno;
    return s;    
end;

 

9 out类型参数

使用存储过程来算年薪
create or replcat procedure p_yearsal(eno emp.empno%type,yearsal out number)
is
    s number(10);
    c emp.comm%type;
begin
    select sal*12,nvl(comm,0) into s,c where empno = emo;
    yearsal := s + c;
end;

测试
declare
    yearsal number(10);
begin
    p_yearsal(7788,yearsal);
    dbms_output.put_line(yearsal);
end;

----in 和 out 类型参数的区别是什么

----凡是涉及到into查询语句赋值或者:=赋值操作的参数,都必须使用out参数来修饰

 

10 存储过程和存储函数的区别

   语法区别: 关键字不一样

----存储函数比存储过程多咯两个return

  本质区别

----存储函数有返回值,存储过程没有返回值

------如果存储过程想实现有返回值的业务,我们就必须使用out类型的参数值

------即便是存储过程使用了out类型的参数,起本质也不是真的有了返回值

------而是在存储过程内部给out类型参数赋值,在执行完毕后,我们直接拿到输出类型参数的值

 

----我们可以使用存储函数有返回值的特性,来自定义函数

----而存储函数不能用来自定义函数

------案例:查询出员工姓名,员工所在部门名称

------准备工作:吧Scott用户下的dept表复制到当前用户下

create table dept sa select * from scott.dept;

------使用传统方式类实现案例需求

select e.ename,d.deptname
from emp e,dept d
where e.deptno=d.deptno;

-------使用存储函数来实现提供一个部门编号,输出一个部门名称

create or replcar function fdna(dno dept.deptno%type) return dept.dname%type
is
    dna dept.dname%type;
    
begin
    select dname into dna from dept where deptno =dno;

    return dna;
end;

----使用fdna来实现案例需求:查询出员工姓名,员工所在部门名称

select e.ename,fdna(e.deptno)
from emp e;

 

11触发器概念和分类

--触发器就是制定一个规则,在我们做增删改操作的时候,

--只要满足该规则,自动触发,无需调用

----语句级触发器: 不包含有 for each row 的就是语句级触发器

 

----行级触发器:包含有 for each row 的就是行级触发器

----加for each row 是为了使用:old 或者:new 对象或者一行记录

 

12触发器的案例演示

--语句级触发器

--插入一条记录,输出一个新员工入职

create or replace trigger t1
alter
insert
on person
declare

begin
    dbms_output.put_line('一个新员工入职');
end;
--触发t1
insert into preson values(1,'小红');
commit;

--行级触发器

----不能给员工降薪

reaise_application_error(-20001~-20999之间,'错误提示信息');

create or replace trigger t2
before
update
on emp
for each row
declare

begin
    if :old.sal>:new.sal then
        reaise_application_error(-20001,'不能给员工降薪');
    end if;
end;

--触发t2
update emp set sal = sal-100 where empno=7788;
commit;

13 触发器实现主键自增

--分析:在用户做插入操作之前,拿到即将插入的数据
--给该数据中的主键列赋值
create or replace trigger auid
before
insert
on person
for each row
declare

begin
    select s_person.nextval into :new.pid from  dual;
end;
--使用auid实现主键自增
insert into  person(panme) values('a');
commit;

14 java调用存储过程之环境准备

 

15 java调用存储过程之环境测试

 

16 java调用存储过程和存储函数

存储过程

存储函数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值