2013-11-11 Oracle 课堂测试 练习题 例:BULK COLLECT及return table

原创 2013年12月05日 17:07:03
--1)  查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的
--学生编号、学生名称、图书编号、图书名称、借出日期;
select s.stuid, s.stuname, b.bid, b.title, bo.t_time
  from borrow bo
  join student s on bo.stuid = s.stuid
  join book b on bo.bid = b.bid
 where bo.t_time between to_date('2007-12-15', 'yyyy-mm-dd') and
       to_date('2008-01-08', 'yyyy-mm-dd') and s.major = '计算机';

--2)  用pl/sql匿名块实现,查询所有借过图书的学生编号、学生名称、专业;(提示:用游标)
declare
  cursor c_student is
    select * from student;
  cursor c_borrow is
    select * from borrow;
begin
  dbms_output.put_line('学生编号  ' || '  学生姓名  ' || '  专业');
  for v_student in c_student loop
    for v_borrow in c_borrow loop
      if v_student.stuid = v_borrow.stuid then
        dbms_output.put_line(v_student.stuid || '        ' ||
                             v_student.stuname || '        ' ||
                             v_student.major);
        exit;
      end if;
    end loop;
  end loop;
end;

--3)  查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期;
select s.stuname, b.title, bo.t_time, bo.b_time
  from borrow bo
  join student s on bo.stuid = s.stuid
  join book b on bo.bid = b.bid
 where b.author = '安意如';

--4)   查询目前借书但未归还图书的学生名称及未还图书数量;
--(要求: 未还图书数,用函数实现,并在sql语句中调用)
create or replace type t_borrowlist_object as object(stuid varchar2(20),
                                                     books number);
create or replace type t_borrowlist_table as table of t_borrowlist_object;

create or replace function f_borrowlist
  return t_borrowlist_table is v_rs t_borrowlist_table;
begin

  select t_borrowlist_object(s.stuname, count(*)) BULK COLLECT
    INTO v_rs
    from borrow bo
    join student s on bo.stuid = s.stuid
    join book b on bo.bid = b.bid
   where bo.b_time is null
   group by s.stuname;

  return v_rs;
end;

select * from table(f_borrowlist());

--5)用一个存储过程完成还书功能,输入参数为学号和书号,把当前日期作为还书日期。
create or replace function f_rebook(v_stuid student.stuid%type,
                                    v_bid   book.bid%type) return varchar2 is
  PRAGMA AUTONOMOUS_TRANSACTION;
  v_flag     number;
  v_borrowid borrow.borrowid%type;
  v_rs       varchar2(200);
begin

  select count(*)
    INTO v_flag
    from borrow
   where b_time is null
     and stuid = v_stuid
     and bid = v_bid;

  if v_flag >= 1 then
    select borrowid
      INTO v_borrowid
      from borrow
     where b_time is null
       and stuid = v_stuid
       and bid = v_bid
       and rownum <= 1;
    v_rs := v_stuid || ' 号同学还 ' || v_bid || ' 图书 成功';
    update borrow set b_time = sysdate where borrowid = v_borrowid;
    commit;
  else
    v_rs := v_stuid || ' 号同学还 ' || v_bid || ' 图书 失败';
  end if;

  return v_rs;
end;

select * from borrow;

select f_rebook('1001', 'B001') from dual;


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

oracle常用的复合数据类型 : BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer

例1:批量 查询部门号为"10" 号的并把它们打印出来.DECLARE   TYPE emp_table_type IS TABLE OF my_emp%ROWTYPE INDEX BY BINARY...

oracle常用的复合数据类型 : BULK COLLECT和is table of table_name%rowtype index by

例1:批量 查询部门号为"10" 号的并把它们打印出来. DECLARE    TYPE emp_table_type IS TABLE OF my_emp%ROWTYPE INDEX BY B...

oracle 11g x64在WIN7 64位旗舰版 安装(york测试通过2013-12-19)

原文地址:http://www.2cto.com/database/201208/150620.html 1. 解压缩文件,将两个压缩包一起选择, 鼠标右击 ->  解压文件 如图   ...

实战BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer

例1: 批量 查询部门号为 "10"  号的并把它们打印出来 . DECLARE    TYPE emp_table_type IS TABLE OF my_emp%ROWTYPE INDEX...
  • zcywell
  • zcywell
  • 2012年02月14日 14:29
  • 8448

oracle批量处理(bulk collect)

  • 2012年03月19日 09:37
  • 54KB
  • 下载

实战BULK COLLECT(成批聚合类型)和数组集合type类型is table of 表%rowtype index by binary_integer .

转载 http://blog.csdn.net/zcywell/article/details/7258049 例1: 批量 查询部门号为 "10"  号的并把它们打印出来 . DECLARE ...

Oracle数据库的批量操作,forall,BULK COLLECT

oracle forall FORALL语句的一个关键性改进,它可大大简化代码,并且对于那些要在PL/SQL程序中更新很多行数据的程序来说,它可显著提高其性能。 1: 用FORALL来增强DML...

Oracle中使用fetch bulk collect into批量效率的读取

通常我们获取游标数据是用 fetch some_cursor into var1, var2 的形式,当游标中的记录数不多时不打紧。然而自 Oracle 8i 起,Oracle 为我们提供了 fetc...

Oracle 的 bulk collect 和 forall 用法

FORALL语句的一个关键性改进,它可大大简化代码,并且对于那些要在PL/SQL程序中更新很多行数据的程序来说,它可显著提高其性能。 1: 用FORALL来增强DML的处理能力 Oracle...
  • tajun77
  • tajun77
  • 2016年02月16日 17:18
  • 268

Oracle的bulk collect使用

bulk collect的作用是将检索结果批量的、一次性的赋给集合变量,并把结果集从PL/SQL引擎传给SQL引擎。与每次获取一条数据,并每次都要将结果由PL/SQL引擎传给SQL引擎相比,可以很大程...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2013-11-11 Oracle 课堂测试 练习题 例:BULK COLLECT及return table
举报原因:
原因补充:

(最多只允许输入30个字)