oracle 索引,视图,存储过程,触发器 函数

来源:互联网 发布:淘宝上怎么试穿衣服 编辑:程序博客网 时间:2024/05/04 06:45
  Oracle索引?

  目地:更快地检索数据。

  特点:读取数据速度快,但添加数据速度慢.。

  语法:

  create index idx_stu_email on stu (email) ;

  drop index idx_stu_email ;

  select index_name from user_indexs ;

  Oracle视图?

  特点:视图相当于子查询。

  语法:

  create view v$;

  select view_name from user_views ;

  desc v$_dept_avg_sal_info ;

  create view v$_stu as select id,name from stu ;

  Oracle存储过程?

  语法:

  1.创建不带参数的存储过程

  create or replace procedure p

  as

  cursor c is

  select * from emp for update;

  begin

  for v_emp in c loop

  if(v_emp.deptno = 10) then

  update emp set sal = sal +10 where current of c;

  elsif (v_emp.deptno = 20) then

  update emp set sal = sal + 20 where current of c;

  else

  update emp set sal = sal + 50 where current of c;

  end if ;

  end loop ;

  commit ;

  end ;

  // 执行存储过程(两种方式)

  · exec p;

  · begin

  p;

  end;

  2.创建带参数的存储过程

  create or replace procedure p

  (v_a in number,v_b number,v_ret out number)

  is

begin

  if(v_a > v_b) then

  v_ret:=v_a ;

  else

  v_ret :=v_b ;

  end if ;

  end ;

  // 执行带参数的存储过程

  declare

  v_a number:=3 ;

  v_b number:=4 ;

  v_ret number ;

  begin

  p(v_a,v_b,v_ret) ;

  dbms_output.put_line(v_ret) ;

  end ;

  Oracle触发器?

  利用触发器实现的业务如下:

  现有两个表:emp和operate_info表,当用户对emp表进行增删改操作时,触发你所创建的触发器,该触发器执行向operate_info表中插入一条信息,记录用户对emp表的操作。

  语法:

  创建emp表:

  create table emp

  (

  uname varchar2(20),

  action varchar2(10),

  atime date

  )

  // 创建触发器

  create or replace trigger trig

  after insert or delete or update on emp for each row

  begin

  if inserting then

  insert into emp_log values (USER,'insert',sysdate) ;

  elsif updating then

  insert into emp_log values (USER,'upate',sysdate) ;

  elsif deleting then

  insert into emp_log values (USER,'dalete',sysdate) ;

  end if;

  end ;

  // 删除触发器

  drop trigger trig ;

 

 

函数

create or replace function getEmpNameById(inid in number) return varchar2--此处不能指定大小  

is  

  v_ename varchar2(10);--此处需要指定大小(或者: emp.ename%type)  

begin  

  SELECT ename   

  INTO v_ename   

  FROM emp   

 WHERE empno=inid;      

  return v_ename;      

end getEmpNameById;  

原创粉丝点击