zoukankan      html  css  js  c++  java
  • Oracle练习第11周

    (括号的表解释说明)

    一.单选题

    1,

    以下哪种程序单元必须返回数据?    

    (10.0分)
    • 存储过程

       
    • 函数

       
    • 触发器

       
    •  
     
    2,

    当建立存储过程时,以下哪个关键字用来定义输出型参数?

    (10.0分)
    • in

       
    • procedure

       
    • out

       
    • function

       
     
    3,

    下列哪个语句可以SQL Plus中直接调用一个存储过程?

    (10.0分)
    • return    

       
    • exec

       
    • set

       
    • in

       
     
    4,

    下面哪些不是存储过程中参数的有效模式?

    (10.0分)
    • in

       
    • out 

       
    • out in 

       
    • in out 

       
     
    5,

    函数头部中的return语句作用是什么?

    (10.0分)
    • 声明返回的数据类型

       
    • 调用函数

       
    • 调用过程

       
    • 函数头部不能使用return语句

       
     

    二.简答题(共4题,50.0分)

    1,

    索引有哪些类型?什么情况下适合建立位图索引

    (12.5分)(仅参考)
     标准:
     1. b-tree索引 Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。CREATE INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。
     2. 位图索引(bitmap index) 位图索引特定于该列只有几个枚举值的情况,比如性别字段,标示字段比如只有0和1的情况。
     3. 基于函数的索引 比如经常对某个字段做查询的时候是带函数操作的,那么此时建一个函数索引就有价值了。
     4. 分区索引和全局索引 这2个是用于分区表的时候。前者是分区内索引,后者是全表索引
     5. 反向索引(REVERSE) 这个索引不常见,但是特定情况特别有效,比如一个varchar(5)位字段(员工编号)含值 (10001,10002,10033,10005,10016..) 这种情况默认索引分布过于密集,不能利用好服务器的并行 但是反向之后10001,20001,33001,50001,61001就有了一个很好的分布,能高效的利用好并行运算。
     6.HASH索引 位图索引适合只有几个固定值的列,如性别、婚姻状况、行政区等等,而身份证号这种类型不适合用位图索引。 位图索引适合静态数据,而不适合索引频繁更新的列。 举个例子,有这样一个字段busy,记录各个机器的繁忙与否,当机器忙碌时,busy为1,当机器不忙碌时,busy为0。 这个时候有人会说使用位图索引,因为busy只有两个值。好, 我们使用位图索引索引busy字段!假设用户A使用update更新某个机器的busy值,比如update table set table.busy=1 where rowid=100;,但还没有commit,而用户B也使用update更新另一个机器的busy值,update table set table.busy=1 where rowid=12; 这个时候用户B怎么也更新不了,需要等待用户A commit。

    我的答案:

    (答了位图索引的建立)

    2,

    简述同义词和序列的概念?序列常用的两个运算符是

    (12.5分) (仅参考)
    标准:
     同义词的概念 Oracle数据库中提供了同义词管理的功能。 同义词 是数据库方案对象的一个别名 ,经常用于 简化对象访问 和提高对象访问的安全性。在使用同义词时,Oracle数据库将它 翻译成对应方案对象的名字 。 与视图类似,同义词 并不占用实际存储空间,只有在数据字典中保存了同义词的定义 。在Oracle数据库中的大部分数据库对象,如表、视图、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。 Oracle同义词的分类 ,分别是 公用public同义词 与 私有同义词
     序列的概念: 序列(Sequence)是用来生成连续的整数数据的对象。它常常用来作为主键的增长列,可以升序,也可以降序。 
    用户可以使用nextval和currval两个运算符访问序列的值。nextval将返回序列生成的下一个值,currval将返回序列的当前值。第一次使用序列时,需要使用nextval,此时返回的是初始值。以后再使用nextval运算符,序列会自动增加increment by后面的值。 5. 修改其他方案中的序列时,用户必须具有alter any sequence系统权限。
     
    3,

    编写过程,实现交换两个变量的值的功能。并输出交换前和交换后的两个值。(in out参数)

    (12.5分)
    标准:

    创建过程
    create or replace procedure swap(
    num1 in out number,
    num2 in out number)
    is z number(5);
    begin
    z:=num1;
    num1:=num2;
    num2:=z;
    end swap;
    /
    调用
    declare
    x number:=10;
    y number:=20;
    begin
    dbms_output.put_line('交换前x和y的值是:'||x||'  '||y);
    swap(x,y);
    dbms_output.put_line('交换后x和y的值是:'||x||'  '||y);
    END;
    /

    我的答案(具体实现,一步步做的):

    创建过程:

    可以在plsql调用(结果清晰):

    查看结果:

     
    4, 

    已知emp表和dept表的结构说明如下:

    emp员工表

    (empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)

    dept部门表

    (deptno部门编号/dname部门名称/loc地点)

    工资 = 薪金 + 佣金


    创建函数,根据给定的部门编号(提示: 利用&)计算该部门所有职工的平均工资。

    (12.5分)

    标准:

    create or replace function avg_sal(id emp.deptno%type) return number is
    avgsal number(7,2);
    begin
    select avg(sal) into avgsal from emp where deptno = id;
    return avgsal;
    end;
    /

    begin
    dbms_output.put_line(avg_sal(&deptno));
    end;
    /

    我的答案(具体实现,一步步做的):

    创建:

    可以在plsql调用(结果清晰):

    (这是我的表中的部门编号)

     输入已存在的部门编号(查询一下自己的emp表,dddd):

    结果:

    经过手工计算器验证后结果是一致的。

  • 相关阅读:
    C语言I博客作业09
    C语言I博客作业08
    C语言I作业07
    C语言博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言|博客作业07
    C语言|博客作业06
    C语言|博客作业05
  • 原文地址:https://www.cnblogs.com/gongsuiqing/p/12881475.html
Copyright © 2011-2022 走看看