Oracle索引、视图、存储过程、触发器案例

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 ;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个更完整的基于Oracle数据库的图书馆管理系统,包括一些触发器和函数,并带有表和表数据视图以及索引: 首先,我们需要创建以下表格: 1. 书籍表(books) ``` CREATE TABLE books( book_id NUMBER PRIMARY KEY, title VARCHAR(100), author VARCHAR(50), publisher VARCHAR(50), publish_date DATE, quantity NUMBER ); ``` 2. 借阅记录表(borrow_records) ``` CREATE TABLE borrow_records( borrow_id NUMBER PRIMARY KEY, book_id NUMBER, borrower VARCHAR(50), borrow_date DATE, return_date DATE ); ``` 3. 用户表(users) ``` CREATE TABLE users( user_id NUMBER PRIMARY KEY, username VARCHAR(50), password VARCHAR(50), email VARCHAR(50) ); ``` 接下来,我们可以创建以下触发器: 1. 在书籍表(books)中插入记录时,自动更新库存量(quantity) ``` CREATE TRIGGER update_quantity AFTER INSERT ON books FOR EACH ROW BEGIN UPDATE books SET quantity = quantity + :new.quantity WHERE book_id = :new.book_id; END; ``` 2. 在借阅记录表(borrow_records)中插入记录时,自动更新书籍库存量(quantity)和借阅次数 ``` CREATE TRIGGER update_borrow_info AFTER INSERT ON borrow_records FOR EACH ROW BEGIN UPDATE books SET quantity = quantity - 1 WHERE book_id = :new.book_id; UPDATE books SET borrow_count = borrow_count + 1 WHERE book_id = :new.book_id; END; ``` 3. 在借阅记录表(borrow_records)中更新记录时,自动更新归还日期(return_date) ``` CREATE TRIGGER update_return_date BEFORE UPDATE OF borrow_date ON borrow_records FOR EACH ROW BEGIN IF :new.return_date IS NULL THEN :new.return_date := SYSDATE + 30; END IF; END; ``` 接下来,我们可以创建以下函数: 1. 检查用户是否存在 ``` CREATE OR REPLACE FUNCTION check_user(username IN VARCHAR, password IN VARCHAR) RETURN BOOLEAN AS user_count NUMBER; BEGIN SELECT COUNT(*) INTO user_count FROM users WHERE username = check_user.username AND password = check_user.password; IF user_count > 0 THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END; ``` 接下来,我们可以创建以下表数据视图: 1. 查询借阅记录表(borrow_records)中借阅次数最多的书籍 ``` CREATE VIEW top_borrowed_books AS SELECT book_id, COUNT(*) AS borrow_count FROM borrow_records GROUP BY book_id ORDER BY borrow_count DESC; ``` 最后,我们可以创建以下索引: 1. 在书籍表(books)的书名(title)和作者(author)列上创建索引 ``` CREATE INDEX books_title_author_idx ON books(title, author); ``` 以上是一个更完整的图书馆管理系统,带有表和表数据视图以及索引,并包括了触发器和函数来帮助管理该系统。您可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java海洋

你的鼓励,是我写下去的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值