Oracle数据库期末考试范围题

一、填空题(共13题)

1、ORACLE数据库的逻辑结构分为( 表空间 )、( 段 )、( 区/盘区 )、( 数据块 )4种。

表空间>段>区>数据块(按大小划分)
表空间是Oracle数据库最大的逻辑存储单元

2、ORACLE中分区索引主要包含3种类型,即( 本地 )分区索引、(全局)分区索引和(全局非)分区索引。
3、ORACLE实例由( 内存结构)和( 后台进程)组成。
4、( 表空间)是ORALCE数据库最大的逻辑存储单元。
5、在ORACLE数据库中,数据对象是以(模式) 为单位进行组织和管理。
6、ORACLE数据查询过程中 ,分组统计使用关键字( group by )
7、在PL/SQL中,( %rowtype)数据类型可以定义一个与数据库某个表结构一致(不知道该表各列的数据类型)的记录类型的变量。
8、ORACLE异常可以分为(预定义异常)、非预定义异常、用户自定义异常。
9、(包)用于将相关的PL/SQL程序块或元素(过程、函数、变量、常量、游标等)组织一起,构成一个完整单元,供应用程序调用。
10、使用(Describe/desc)命令可以显示表的结构信息。
11、(视图)是一个表示表的数据的数据库对象,它允许用户从一个表或一组表中通过一定的查询语句建立一个“虚表”。
12、(序列)是一种可被多个用户使用的用于产生一系列唯一数字的数据库对象。尤其适合多用户环境中,可以生成唯一的序列号而没有磁盘I/O或事务处理锁定开销。
13、 数据字典的所有者是(sys)。其数据字典表和视图都被保存在(system)表空间中。

二、选择题(共61题)

1、 在PL/SQL程序块中当向表中插入一条主键值重复的记录时,系统将触发( B )系统预定义异常。
A、too_many_rows B、dup_val_on_index
C、no_data_found D、login_denied

在这里插入图片描述

oracle异常

2、 ( A )数据库对象是用于产生唯一序号值,可以一次生成不重复的连续整数。
A、序列 B、视图 C、索引 D、函数

视图是一个表示表的数据的数据库对象,它允许用户从一个表或一组表中通过一定的查询语句建立一个“虚表
函数在PL/SQL中存储程子程序包括存储过程(存储)函数两种。存储过程用于执行特定的操作,不需要返回值;而函数则用于返回特定的数据。在调用时,存储过程可以作为一个独立的表达式被调用,二函数只能作为表达式的一个组成部分被调用。
索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree)。使用索引的全部意义就是通过缩小一张表中需要查询的记录/行的数目来加快搜索的速度。
索引详解

3、 当某用户以AS SYSDBA身份成功登录SqlPlus后,执行show user命令后,显示的是( D )用户。
A、SYSDBA B、SYSTEM C、PUBLIC D、SYS

SYS与SYSTEM、DBA与SYSDBA的区别:
一、SYS与SYSTEM:
1、sys 的角色是sysdba,system 的角色是sysoper;
2、sys 具有create database的权限 ,system没有该权限;
3、sys可以建数据字典的基表和视图,也能对其进行修改;system不能建数据字典的 基表和视图.也不能对其进行修改;
4、sys、system都有dba权限;
用QQ群作个比喻,sys就相当于群主,system就相当于群管理员。
二、DBA与SYSDBA:
SYSDBA不是权限,当用户以SYSDBA身份登陆数据库时,登陆用户都会变成SYS。
SYSDBA身份登陆可以打开,关闭数据库,创建SPFILE,对数据库进行恢复操作等,而这些是DBA角色无法实现的;
SYSDBA是系统权限,DBA是用户对象权限;

4、 在SqlPlus环境下,当需要以新的用户身份连接数据库时,应使用( A )命令进行新的连接。
A、connect B、quit C、execute D、show

quit命令/exit命令:退出
Oracle退出SQLPLUS的注意事项
execute命令:执行
show命令:展示
SQLPLUS命令大全

5、 ORACLE的表空间与数据文件是( A )关系。
A、1对多 B、1对1 C、多对1 D、多对多

Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle中信息存储的最大逻辑单元,其下还包含有段、区、数据块等逻辑数据类型。表空间是在数据库中开辟的一个空间,用于存放数据库的对象,一个数据库可以由多个表空间组成。可以通过表空间来实现对Oracle的调优。(Oracle数据库独特的高级应用)数据库容量在物理上由数据文件大小与数量决定,在逻辑上由表空间大小与数量决定。
Oracle表空间详解

6、 以下物理文件中( C )用于存储与数据结构相关的信息如数据库名、表空间名、检查点信息等,且这些文件是多路镜像关系。
A、参数文件 B、数据文件 C、控制文件 D、重做日志文件

数据文件是数据库中所有数据的实际存储空间,所有数据文件的大小和构成了数据库大小
控制文件是记录数据库结构信息的重要的二进制文件,由Oracle系统进行读写操作,DBA不能直接操作控制文件。
控制文件详解
重做日志文件是以重做记录的形式记录、保存用户对数据库进行的变更操作,是数据库最重要的物理文件。
重做日志文件的管理
归档日志文件是历史联机重做日志问价的集合,是联机重做日志文件被覆盖之前各份的副本。
初始化参数文件是数据库启动过程所必须的文件,记录了数据库显示参数的设置。
Oracle存储的三大物理文件

7、( A )是ORALCE数据库最小的逻辑存储单元。
A、数据块 B、段 C、盘区 D、表空间
8、以下( B )数据类型用于存储可变长度的字符串。
A、char B、varchar C、number D、date

9、 在创建表时,当某列起到唯一标识作用,其值不能重复也不能为空时,应为该列定义( C )约束。
A、非空 B、外键 C、主键 D、唯一

1.—-主键约束(Primay Key Coustraint) 唯一性,非空性
2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
3.—-检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)
4.—-默认约束 (Default Counstraint) 该数据的默认值
5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列
数据库表的约束条件

10、 ( D )索引是为每一个索引值建立一个位图,该位图使用一个比特位对应一条记录的ROWID。
A、B树 B、函数 C、反键 D、位图

Oracle数据库提供以下类型的索引:
B-tree索引(Oracle默认建立B-tree索引)
B-tree聚集索引(B-tree cluster indexes)
Hash聚集索引(Hash cluster indexes)
反向索引(Reverse key indexes)
位图索引(Bitmap indexes)
位图连接索引(Bitmap join indexes)
Oracle数据库索引详解

11、视图是一个( A ),在数据库中只存放了对视图的定义。
A、虚拟表 B、真实表 C、临时表 D、链接表

数据库虚拟表–视图(view)详解
数据库临时表详解

12、当需要更新表中的某些记录时,应使用( D )语句进行数据更新。
A、EXEC B、ALTER C、REUSE D、UPDATE

ALTER命令:更改
UPDATE命令:更新
EXEC命令:执行
REUSE命令:重复使用 创建表的reuse
SQL常用语句

13、 在PL/SQL程序块中查询数据时,没有发现数据,系统将触发( C )系统预定义异常。
A、too_many_rows B、dup_val_on_index
C、no_data_found D、login_denied
14、当用户以SYSDBA身份登录SqlPlus后,使用show user 显示的用户名是( C )。
A、SYSDBA B、SYSTEM C、SYS D、PUBLIC
15、以下( C )数据类型用于存储数值类型数据。
A、char B、varchar2 C、number D、date
16、每个数据库至少需要( B )个重做日志文件组,采用循环写的方式
进行工作。
A、1 B、2 C、3 D、4

每个数据库至少需要两个重做日志文件,采用循环写的方式进行工作。这样就能保证,当一个重做日志文件在进行归档时,还有另外一个重做日志文件可用。

17、关于控制文件,下列说法正确的是( A )。
A、建议至少有两个位于不同磁盘上的控制文件
B、建议至少有两个位于同一磁盘上的控制文件
C、建议保存一个控制文件
D、一个控制文件,数据库不能运行。

为了提高数据库的安全性,至少要为数据库建立两个控制文件,并且这两个控制文件最好分别保存在不同的磁盘中,这样就可以避免产生由于某个磁盘故障而无法启动数据库的危险,该管理策略被称为多路复用控制文件。

18、 ORACLE表空间的管理方式有本地管理和( D )。
A、区管理 B、段管理 C、 数据块管理 D、字典管理

表空间的管理方式:分为字典管理方式(DICTIONARY)和本地管理方式(LOCAL)两种。默认创建的表空间采用本地管理的方式。

19、创建存储过程中,局部变量应放在下列哪个关键字之后( A )。
A、IS B、BEGIN C、END D、PROCEDURE

创建存储过程的语法,局部变量放在关键字AS/IS后
Oracle创建存储详解

    create [or replace] procedure 存储过程名(param1 in type,param2 out typeis
变量1 类型(值范围);
变量2 类型(值范围);
Begin
    Select count(*) into 变量1 from 表A where列名=param1;

    If (判断条件) then
       Select 列名 into 变量2 from 表A where列名=param1;
       Dbms_output。Put_line(‘打印信息’);
    Elsif (判断条件) then
       Dbms_output。Put_line(‘打印信息’);
    Else
       Raise 异常名(NO_DATA_FOUND);
    End if;

Exception
    When others then
       Rollback;
End;

20、不属于游标的属性是( C )。
A、%notfound B、%found C、 %rowtype D、 %rowcount

游标的属性:found,not found,rowcount,isopen
1.found:找到记录返回true。
2.not found:没找到记录返回true。
3.rowcount:返回更新的行数。
4.isopen:游标是否打开,这个属性由游标的open和close更新。
游标详解

--通过游标的属性监控游标的状态
declare
  cursor cu_student is
  select * from students;
  student students%rowtype;
begin
  --声明游标后
  if cu_student%isopen then
    dbms_output.put_line('声明游标后,isopen返回true');
  else
    dbms_output.put_line('声明游标后,isopen返回false');
  end if;
  --打开游标后
  open cu_student;
    if cu_student%isopen then
      dbms_output.put_line('打开游标后,isopen返回true');
    else
      dbms_output.put_line('打开游标后,isopen返回false');
    end if;
  --执行fetch后
    fetch cu_student into student;
        dbms_output.put_line('第一次执行fetch,cu_student%rowcount='||cu_student%rowcount);
    if cu_student%found then
       dbms_output.put_line('打开游标后,found返回true');
    else
      dbms_output.put_line('打开游标后,not found返回false');
    end if; 
  --执行循环后
    loop
      if cu_student%found then
        dbms_output.put_line('loop: cu_student%rowcount=' || cu_student%rowcount);
        fetch cu_student into student;
      else
        dbms_output.put_line('loop: found属性');-- || cu_student%found);
        dbms_output.put_line('loop: 循环结束rowcount=' || cu_student%rowcount);
      end if;
      exit;
    end loop;
  close cu_student;
  if cu_student%isopen then
    dbms_output.put_line('关闭游标后,isopen(true)');-- || cu_student%isopen);
  else
    dbms_output.put_line('关闭游标后,isopen(false)');-- || cu_student%isopen);
  end if;
end;
--结果
声明游标后,isopen返回false
打开游标后,isopen返回true
第一次执行fetch,cu_student%rowcount=1
打开游标后,found返回true
loop: cu_student%rowcount=1
关闭游标后,isopen(false)
PL/SQL procedure successfully completed

21、在oracle中,用来显示emp表中没有奖金的员工信息的命令是( C )
A、select * from emp where comm=null
B、select * from emp where comm<>null
C、select * from emp where comm is null
D、select * from emp where comm is not null
22、在oracle中,一个用户拥有的所有数据库对象统称为( B )
A、数据库 B、模式 C、表空间 D、实例
23、在Oracle数据库的逻辑结构中有以下组件:
a表空间 b数据块 c区 d段
这些组件从大到小依次是( B )
A、abcd B、adcb C、acbd D、dacb
24、在Windows操作系统中,Oracle的( A )服务监听并接受来自客户端应用程序的链接请求。
A、OracleHOME_NAMETNSListener B、OracleServiceSID
C、OracleHOME_NAMEAgent D、OracleHOME_NAMEHTTPServer

启用了服务监听器,才可以正常使用Oracle数据库。

25、在Oracle数据库中,( B )用户模式存储数据字典表和视图对象。
A、SYSTEM B、SYS C、SCOTT D、SYSDBA
26、在Oracle中,下面哪条语句当COMM字段为空时显示0,不为空时显示COMM的值( A )。
A、SELECT ename,NVL(comm,0) FROM emp;
B、SELECT ename,NULL(comm,0) FROM emp;
C、SELECT ename,NULLIF(comm,0) FROM emp;
D、SELECT ename,DECODE(comm,NULL,0) FROM emp;
27、在Oracle中,游标都具有下列属性,除了( C )。
A、%NOTFOUND B、%FOUND C、%ROWTYPE D、%ROWCOUNT
28、在Oracle中,当控制一个显示游标时,下面哪种命令包含INTO子句( C )。
A、OPEN B、CLOSE C、FETCH D、CURSOR

显示游标与隐式游标详解

FETCH c4 INTO v_emp_record;    --3、提取游标fetch into
CURSOR c4(dept_id NUMBER, j_id VARCHAR2) --1、声明游标,有参数没有返回值 
OPEN c4(90, 'AD_VP');             --2、打开游标,传递参数值  
CLOSE c4;                         --4、关闭游标 
DECLARE  
   CURSOR c4(dept_id NUMBER, j_id VARCHAR2) --1、声明游标,有参数没有返回值  
   IS  
      SELECT first_name f_name, hire_date FROM employees  
      WHERE department_id = dept_id AND job_id = j_id;  
  
    --基于游标定义记录变量,比声明记录类型变量要方便,不容易出错  
    v_emp_record c4%ROWTYPE;  
BEGIN  
   OPEN c4(90, 'AD_VP');             --2、打开游标,传递参数值  
   LOOP  
      FETCH c4 INTO v_emp_record;    --3、提取游标fetch into  
      IF c4%FOUND THEN  
         DBMS_OUTPUT.PUT_LINE(v_emp_record.f_name||'的雇佣日期是'  
                            ||v_emp_record.hire_date);  
      ELSE  
         DBMS_OUTPUT.PUT_LINE('已经处理完结果集了');  
         EXIT;  
      END IF;  
   END LOOP;  
   CLOSE c4;                         --4、关闭游标  
END;  

29、有数据“test”分别存放到char(10)和varchar2(10)类型的字段中,其实际存储长度为( C )。
A、10 10 B、4 4 C、10 4 D、4 10
30、如果要查询数据库中所有表的信息,应当使用下列哪种数据字典视图?( A )
A、DBA视图 B、ALL视图 C、USER视图 D、动态性能视图

一、user_tables、all_tables、dba_tables关系:
user_tables :可查询当前用户的表;
all_tables :可查询所有用户的表;
dba_tables:可查询包括系统表在内的 所有表
二、user_users、all_users、dba_users 关系:
user_users :描述当前用户;
all_users :列出数据库中对当前用户可见的所有用户;
dba_users :描述数据库中所有用户。
(系统权限递增)

select count(*) from dba_tables;     //count(*)统计表的个数
select count(*) from dba_objects where object_type='TABLE'select count(*) from all_tables;
select count(*) from tabs;
select count(*) from user_tables;  //tabs等同于user_tables
select count(*) from tab;

31、下列哪一项是Oracle数据库中最小的存储分配单元? ( D )
A、表空间 B、 段 C.、盘区 D、数据块
32、下面的各选项中哪一个正确描述了Oracle数据库的逻辑存储结构? ( A )
A、 表空间由段组成,段由盘区组成,盘区由数据块组成
B、 段由表空间组成,表空间由盘区组成,盘区由数据块组成
C、盘区由数据块组成,数据块由段组成,段由表空间组成
D、数据块由段组成,段由盘区组成,盘区由表空间组成
33、关于模式的描述下列哪一项不正确?( C )
A、表或索引等模式对象一定属于某一个模式
B、在Oracle数据库中,模式与数据库用户是一一对应的
C、一个表可以属于多个模式
D、一个模式可以拥有多个表

在oracle 11g数据库中,数据库对象是以模式为单位进行组织与管理的。所谓模式是指一系列逻辑数据结构或对象的集合。模式与用户相对应,一个模式只能被一个数据库用户所拥有,并且模式的名称与这个用户的名称相同。通常情况下,用户所创建的数据库对象可以同名。都保存在与自己同名的模式中。在同一个模式中,数据库对象的名称必须唯一;而在不同模式中的数据库对象可以同名。也就是说,一个模式可以拥有多个表,而一个表只属于一个模式。
oracle 数据库中并不是所有的对象都是模式对象。

表、索引、索引化表、分区表、物理化视图、视图、数据库链接、序列、同义词、
PL/SQL 包、存储函数与过程、java类与其他 java 等属于特定的模式,称为模式对象

表空间、用户、角色、目录、概要文件及上下文等数据库对象不属于任何模式,称为非模式对象

34、声明%TPYE类型的变量时,服务器将会做什么操作?( A )
A、为该变量检索数据库列的数据类型
B、复制一个变量
C、检索数据库中的数据
D、为该变量检索列的数据类型和值

定义一个变量,其数据类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE。使用%TYPE 特性的优点在于:1.所引用的数据库列的数据类型可以不必知道;2. 所引用的数据库列的数据类型可以实时改变。
PL/SQL中使用%TYPE和%ROWTYPE的区别

35、如果允许用户对视图进行更新和插入操作,但是又要防止用户将不符合视图约束条件的记录添加到视图,应当在定义视图时指定下列哪一个子句?( C )
A、WITH GRANT OPTION
B、WITH READ ONLY
C、WITH CHECK OPTION
D、WITH CHECK ONLY

当创建的视图中带有with check option 子句时,只要DML的结果满足该创建的视图中的where子句条件,DML就可以正常进行。如果不加WITH CHECK OPTION则在插入时不会检查where条件。即如果你在创建视图时,使用where 子句限制时没有使用到 with check option 子句 时,当你在通过视图插入数据时,oracle 就不会检查 where 子句的限制条件。

36、如果想查看视图中哪些字段是可以更新的,应当查询哪一个数据字典视图?( D )
A、DBA_VIEWS B、DBA_OBJECTS
C、DBA_CLU_COLUMNS D、 DBA_UPDATABLE_COLUMNS

DBA_VIEWS:数据库中所有的视图
DBA_OBJECTS:数据库中所有的对象
DBA_TABLES:数据库中所有的表
DBA_OBJECT_TABLES数据库中所有的对象表
ALL_TABLES:意为某一用户拥有的或可以访问的所有的表。
USER_TABLES:意为某一用户所拥有的所有的表。

37、在下列各选项中,关于序列的描述哪一项是不正确的?( D )
A.、序列是Oracle提供的用于产生一系列唯一数字的数据库对象
B、序列并不占用实际的存储空间
C、使用序列时,需要用到序列的两个伪列NEXTVAL与CURRVAL。其中,NEXTVAL 将返回序列生成的下一个值,而CURRVAL返回序列的当前值。
D、在任何时候都可以使用序列的伪列CURRVAL,以返回当前序列值。

序列的两个伪列NEXTVAL与CURRVAL。其中,NEXTVAL 将返回序列生成的下一个值,而CURRVAL返回序列的当前值。返回的值为number型。伪列NEXTVAL和CURRVAL的使用有条件限制。可以前者情况下使用,而不能再后者情况下使用。
一、currval和nextvall可用于以下位置:
1、insert语句的子查询的目标列,VALUES字句中;
2、select语句的select列表;
3、update语句的set子句;
二、这些地方不能使用currval和nextvall:
1、子查询;
2、视图查询或物化视图查询;
3、带distinct运算符的select语句;
4、带有group by或order by子句的select语句;
5、一个select语句,它与另一个select语句结合使用union、intersect或minus set运算符;
6、select语句的where子句;
7、检查约束条件;

38、想在另一个模式中创建表,用户最少应该具有什么系统权限?( B )
A、CREATE TABLE B、CREATE ANY TABLE C、RESOURCE D、DBA

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户: 授予connect, resource权限。
对于DBA管理用户: 授予connect,resource, dba权限。
CREATE TABLE: 在用户模式中创建表
CREATE ANY TABLE: 在任何模式中创建表
Oracle数据库的权限、用户、角色管理

39、Oracle 11g中的g表示( C )。
A、网络 B、数据库 C、网格计算 D、版本

g— Grid Computering

40、下列哪种表空间可以被设置为脱机状态( B )。
A、系统表空间 B、用户表空间 C、临时表空间 D、撤销表空间

除了SYSTEM表空间、存放在线回退信息的撤销表空间临时表空间不可以脱机(这些表空间对数据库的正常操作至关重要,不可以脱机。),其他的表空间都可以设置为脱机状态。将某个表空间设置为脱机状态时,属于该表空间的所有的数据文件都处于脱机状态。

alter tablespace users offline;

41、在PL/SQL代码段的异常处理块中,捕获所有异常的关键词是( A )
A、OTHERS B、ALL C、EXCEPTION D、ERRORS

OTHERSA异常处理器是一个特殊的异常处理器,可以捕获所有的异常。通常,OTHERS异常处理器总是作为异常处理器部分的最后一个异常处理器,负责处理那些没有被其他异常处理器捕获的异常。例如:

declare
  e_highlimit exception;
  v_sal employees.salary%type;
begin
  select salary
    into v_sal
    from employees
   where lastname = 'smith' update employees set salary = salary + 500
   where employeeid = 120
 
   if v_sal > 6000 then raise e_highlimit;
end if;
exception
   when e_highlimit then
   dbms_output.put_line('the salary is too large');
   rollback;
   when others then //OTHERS异常处理器,可以捕捉所有的异常。
     dbms_output.put_line(sqlcode || ' ' || sqlerrm);
end;

要截获Oracle服务器没有预定义的错误,需先声明这个错误或者使用OTHERS处理器。

42、在PL/SQL语句块中,跳出循环体所用的语句是( C )
A、break B、continue C、exit D、next

  EXIT WHEN v_count=15;--条件退出 v_count:=v_count+2; 
SET SERVEROUTPUT ON 
DECLARE     v_total  NUMBER(6):=0;    v_count  NUMBER(6):=1; 
    BEGIN   LOOP 
        v_total:=v_total+v_count**2; 
        EXIT WHEN v_count=15;--条件退出 v_count:=v_count+2; 
   END LOOP; 
    DBMS_OUTPUT.PUT_LINE(v_total); 
    END; 

43、PL/SQL程序设计中,抛出一个异常的子句是( B )
A、THROW B、RAISE C、THROWS D、CAST

       raise_application_error
           (-20000, 'NEW_EMP::hiredate cannot be in the future'); --3、抛出自定义异常
create or replace procedure new_emp
    ( p_name in emp.ename%type
      , p_sal in emp.sal%type
      , p_job in emp.job%type
      , p_dept in emp.deptno%type
      , p_mgr in emp.mgr%type 
      , p_hired in emp.hiredate%type := sysdate )
is
    invalid_manager exception;                     --1、定义
    PRAGMA EXCEPTION_INIT(invalid_manager, -2291); --2、关联
    dummy varchar2(1);
begin
    if trunc(p_hired) > trunc(sysdate) 
    
    then
        raise_application_error
           (-20000, 'NEW_EMP::hiredate cannot be in the future'); --3、抛出自定义异常
    end if;
 
    insert into emp
        ( ename
          , sal
          , job
          , deptno
          , mgr 
          , hiredate )
    values      
        ( p_name
          , p_sal
          , p_job
          , p_dept
          , p_mgr 
          , trunc(p_hired) );
exception
    when dup_val_on_index then
        raise_application_error
            (-20001, 'NEW_EMP::employee called '||p_name||' already exists', true); --3、包装Oracle异常
    when invalid_manager then
        raise_application_error
            (-20002, 'NEW_EMP::'||p_mgr ||' is not a valid manager'); --3、包装自定义异常
 
end;
/

44、索引的特点( A )
A、索引越多查询越快 B索引越多查询越慢
C、索引越多更新越快 D、索引越多查询更新就越快

表中索引数目越多,查询速度越快,但表的更新速度越慢。所以要限制表中的索引的数目。

45、当在一个PLS/QL块中进行一个查询,但是没有任何值返回时,会( B )
A、不会有异常,只不过没有结果而已 B、有异常,异常为No_data_found
C、有异常,异常为Value_erro D、编译都不通过

a number(10);
b number(10);
c varchar(20);
begin
  select age, sex, name into a, b, c from myemp t where t.empno = pno;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
  dbms_output.put_line('捕获到异常'); 
END;

若查询没有任何值返回,会捕获NO_DATA_FOUND异常。

46、关于程序包,下列说法错误的是( D )
A、包由包规范和包体两部分组成,在数据库中独立存储。
B、在包规范中声明的任何元素都是公有的,在包外部都是可见的。
C、包体中包含在包规范中声明的过程和函数的实现代码。
D、在包规范中声明的元素仅能在包的内部使用。

包体中包含在包规范中声明的过程和函数的实现代码。此外,包体中还可以包含在包规范中没有的变量、游标、类型、异常、过程和函数等。但它们是私有元素,只能由同一包中的过程或函数使用。也就是说,在包规范中定义而没有在包规范中声明的元素则是私有的,只能在包体中引用。在包规范中声明的元素不仅能在包的内部使用,也能在外部使用。此时的元素是公有的。

47、安装oracle数据库过程中SID指的是什么:( B )
A.系统标识号 B.数据库名 C.用户名 D.用户口令
48、下面哪个用户不是ORACLE缺省安装后就存在的用户( A )
A .SYSDBA
B. SYSTEM
C. SCOTT
D. SYS
49、下面哪个操作会导致用户连接到ORACLE数据库,但不能创建表( A )
A. 授予了CONNECT的角色,但没有授予RESOURCE的角色
B. 没有授予用户系统管理员的角色
C. 数据库实例没有启动
D. 数据库监听没有启动
50、ORACLE数据库在启动的时候,必须启动以下哪两个服务( AC )
A.OracleOraDb11g_home1TNSListener
B.OracleMTSRecoveryService
C.OracleServiceORCL
D.OracleJobSchedulerORCL
51、有一产品表(编号,名称,价格,数量,所属分类),下列语法不正确的是( B )
A、select * from 产品表 where 价格>1000
B、select * from 产品表 where 编号,名称
C、select所属分类,价格数量 from 产品表 where 价格>1000
D、select所属分类, 价格
数量,名称 from 产品表
52、以下语句中可以正确查看服务器时间的sql语句是:( A )
A. select sysdate from dual; B. select systemdate from dual;
C. select current_date from dual; D. 以上说法均不正确。

sysdate取的是服务器(主机)的当前日期和时间
current_date取得是会话的当前日期和时间
注意:一般情况下,二者相同。但如果修改了当前会话的时区,则会不同。

53、查看系统日期,要使用( D )。
A.实体化视图 B.表 C.序列 D.伪表Dual

SELECT SYSDATE FROM DUAL;

54、在Oracle中,( B )操作符返回并集操作并不包括重复行。
A. Intersect B. Union C. Union all D. Minus
55、查询语句中用来连接字符串的符号是( C )。
A. “+” B. “&” C. “||” D. “|”
56、在查询语句中用来去重的关键字是( A )
A.distinct B.distin C.union D.union all

在sql表中,可能会出现重复数据。有些时候我们希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。例如:

1.作用于单列

select distinct name from A

 

2.作用于多列

select distinct name, id from A

 

3.COUNT统计

select count(distinct name) from A; 

57、下列哪个关键字或子句用来限定查询结果集中的行? (B)
A.SELECT B.WHERE C.UPDATE D.INSERT

//查询sname行
select *from Student where sname='xiaobaicai';

58、以下哪个结构是查询语句中必须有的( B )
A.select 字段 from tablename where …
B .select 字段 from …
C.select 字段
D.select 字段tablename
59、以下哪个操作符不属于逻辑运算符 (C)
A.and B.or C.no D.not
在这里插入图片描述

60、模糊匹配字符串内容的时候使用的是(C )
A.in B.or C.like D.=

select * from sync_diff_data d where REGEXP_LIKE(字段名称,' 值1 | 值2 | 值3 ')

61、以下哪个语句是查询comm为空正确的写法( D )
A.select * from emp where comm =null;
B.select * from emp where comm =’’;
C. select * from emp where comm=0;
D. select * from emp where comm is null;

三、简答题(共6题)

1 简要游标的作用和游标操作的基本步骤。
答:游标的作用是将数据库的中数据检索出来后缓存,可以被PL/SQL程序一行一行的读取并处理。支持一条、多条、零条记录的处理。
游标的基本操作步骤为:
(1)声明游标,使用查询来定义游标的列和行
(2)打开游标,使用PL/SQL命令OPEN来打开一个声明的游标
(3)提取数据,从游标中重复提取每条记录到数据结构中,直到数据集合被提交
(4)关闭游标,使用完游标后将其关闭
2 简述Oracle数据库逻辑存储结构的组成及相互关系。
Oracle数据库逻辑存储结构分为数据库、区、段、表空间4种。数据块是数据库中最小的I/O单元,由若干个连续的数据块组成的区是数据库中最小的存储分配单元,由若干个区形成的段是相同类型数据的存储分配区域,由若干个段形成的表空间是最大的逻辑存储单元,所有的表空间构成一个数据库。

3简述Oracle中异常类型及处理过程。
Oracle中异常类型分为:预定义异常、非预定义异常、用户定义异常
预定义异常:
– oracle预定义的异常,当这些异常情况发生时,系统可捕获异常并在程序中根据异常名称对程序进行异常处理。
Oracle非预定义的异常:
– 是其他标准的Oracle错误。对这种异常情况的处理,首先需要用户在PL/SQL块的declare部分中定义;然后将其定义好的异常名与标准的Oracle错误编号联系起来;最后在异常触发后对其处理。
用户自定义的异常
– 是由程序员根据逻辑规则定义的一些异常并对它进行处理。首先需要用户在PL/SQL块的declare部分中定义;然后当用户自定义错误产生时,抛出异常;最后捕获并处理异常。

4简述Oracle数据库数据库中模式与用户的关系
模式和用户一一对应,一个模式只能被一个数据库用户所拥有,并且模式名和这个用户名相同。在通常情况下,用户所创建的数据库对象都保存在自己同名模式中。在同一模式中数据库对象的名称必须唯一,而在不同模式中,数据库对象可以同名。

5 简述表空间的类型和作用
可以分为永久表空间、临时性表空间、撤销表空间。
永久性表空间:一般保存表、视图、过程和索引等的数据。
临时性表空间:只用于临时数据管理的表空间。
撤销表空间:用来回滚信息的自动管理。

6、创建表的时候有时候我们会添加相应的约束,请分别列出添加主键约束,唯一约束,验证约束,非空约束,外键约束的约束内容是怎样的?
添加约束的格式
Alter table 表名 add constraint 约束名 约束内容
对应的约束内容如下:
主键 primary key(字段)
唯一 unique(字段)
验证 check(验证)
非空 字段 not null
外键约束 foreign key (字段) references 外键表(字段)
7、将缓存区的操作进行提交的时候用到的关键字是什么,收回的关键字是什么?
提交 commit
收回 rollback
8、数据操纵语言都有哪些,请分别列出使用他们时的语法是怎样的?
数据操作类的语言有select ,insert,update,delete
Select * from 表名;
Insert into 表名 values();
Update 表名 set 字段名=值 where 条件;
Delete from 表名 where 条件;

四、代码题 (共12题)

1.使用SYS或SYSTEM账户以sysdba身份登录SqlPlus.

sqlplus sys/ as sysdba
sqlplus sys/123456@ORCL as sysdba
  1. 创建一个永久表空间,有1个或2个数据文件。
create tablespace tablespace1 datafile
'E:\app\zjk\tablespace1_dbf' 
autoextend on next 1m  size 50m;

3.创建一个用户,并指定其默认的表空间,指定其登录口令。授予该用户CONNECT、RESOURCE、DBA角色或授予CREATE TABLE\CREATE VIEW\create SEQUENCE等权限。

create user xiaobaicai identified by 123456 default tablespace users;
grant connect,resource,dba to xiaozhou;
grant create table,create view,create sequence to xiaohzou;

4.使用普通用户连接数据库。

connect xiaobaicai/123456;

5.创建一个带有约束的普通永久表,会添加主键约束、唯一约束、检查约束。并会录入记录。会进行修改表,如添加列,删除列,添加约束等。

create table student     //创建表student
(Sno number(6) PRIMARY KEY,  //主键约束
 Sid number(14) UNIQUE,   //唯一约束
 Ssex char(2) CHECK,    //检查约束
 Sname varchar(8) NOT NULL,   //非空约束
 Sclass varchar (12)
 )
 tablespace users;     //创建的表存放在表空间users中
//插入数据//
insert into student values(000001,42098420090912,'M','xiaobaicai','SE1821');
// 修改表//
alter table student
add (phone_number varchar2(20), address varchar2(20));
//添加列phone_number和address
alter table student
drop (phone_number,address);
//删除列phone_number和address
alter table student
add constraint P_PK PRIMARY KEY (Sid);
//修改表student,为Sid列添加主键约束
//P_PK为约束名,PRIMARY KEY为约束内容
  1. 创建一个分区表,将各分区存储在不同的表空间中。主要创建范围分区表、列表分区表、散列分区表。
//range table//
create table stud_range_140 (
studID CHAR(10) PRIMARY KEY NOT NULL,
studName VARCHAR2(20) NOT NULL,
sex CHAR(2),
startDate DATE,
depart VARCHAR2(30)
)
PARTITION BY RANGE(startDate)
(PARTITION p1 VALUES LESS THAN (TO_DATE('2011-8-1','YYYY-MM-DD'))
TABLESPACE USERTBS_140,
PARTITION p2 VALUES LESS THAN (TO_DATE('2013-8-1','YYYY-MM-DD'))
TABLESPACE ORCLTBS1_140,
PARTITION p3 VALUES LESS THAN(MAXVALUE)
TABLESPACE USERS
);

// list table//
CREATE TABLE stud_list_140(
studID CHAR(10) PRIMARY KEY NOT NULL,
studName VARCHAR2(20) NOT NULL,
sex CHAR(2),
startDate DATE,
depart VARCHAR2(30)
)
PARTITION BY LIST(depart)
(PARTITION p1 VALUES('计算机系')
TABLESPACE USERTBS_140,
PARTITION p2 VALUES('管理系')
TABLESPACE USERS
);


//hash table//
CREATE TABLE stud_hash_140(
studID CHAR(10) PRIMARY KEY NOT NULL,
studName VARCHAR2(20) NOT NULL,
sex CHAR(2),
startDate DATE,
depart VARCHAR2(30)
)
PARTITION BY HASH(studID)
(PARTITION p1 TABLESPACE USERTBS_140,
PARTITION p2 TABLESPACE ORCLTBS1_140
);

创建不同的分区表,有不同的关键字。范围分区表:RANGE ,列表分区表:LIST , 散列分区表:HASH。创建的分区表会分为多个表,如p1,p2,p3…。一般来说,p1,p2,p3…等这些表会存放在不同的表空间(如USERTBS_140、ORCLTBS1_140)。

7.创建一个视图,主要使用表的内连接、外连接创建视图,或使用分组语句(GROUP BY)创建视图。

SQL> create view v_dep_avgsal
  2  as
  3  select deptno,avg(sal) avgsal from emp
  4  group by deptno;

视图已创建。

8.创建索引(唯一索引、位图索引、普通B树索引)

// b-tree  index//
CREATE INDEX ind_prod_cateid ON products (categoryid)
tablespace users;
SELECT productId,productName,unitPrice FROM products 
WHERE categoryid='2';
//UNIQUE index//
CREATE UNIQUE INDEX ind_unq_prodname ON products (productName)
tablespace users;
//BITMAP index//
CREATE BITMAP INDEX ind_btm_country ON orders (ShipCountry)
tablespace users;

创建索引时,默认创建的索引为普通B数索引。创建唯一索引的关键字:UNIQUE,创建位图索引的关键字:BITMAP。

  1. 创建序列,主要掌握设置初始值和增量。
 SQL> CREATE SEQUENCE seq_scoreId
  2  START WITH 100   //初始值100
  3  INCREMENT BY 10   //增量10
  4  MAXVALUE 10000    //最大值10000
  5  CACHE 100;     //内存100

10.创建存储过程

 SQL> set serveroutput on 
 SQL> CREATE OR REPLACE PROCEDURE Para_InsertProd
  2  (prodid number,prodname nvarchar2,suppid number,cateid number default)
  3  BEGIN
  4  INSERT INTO products(productid,productname, supplierid, categoryid)
  5  VALUES(prodid, prodname, suppid, cateid);
  6  commit;
  7  EXCEPTION
  8  WHEN DUP_VAL_ON_INDEX THEN
  9  dbms_output.put_line ('产品编号已存在');
 10  WHEN VALUE_ERROR  THEN
 11  dbms_output.put_line('输入数据长度类型不合适,出现数字、数据转换、字符串或限制型错误');
 12  WHEN OTHERS THEN
 13  dbms_output.put_line('其他错误');
 14  END;
 15
 16  /

11.创建函数

SQL> CREATE OR REPLACE FUNCTION MaxQuantity
  2  RETURN OrderDetails.Quantity%type
  3  IS
  4  sel_maxquantity OrderDetails.Quantity%type;
  5  BEGIN
  6  SELECT max(Quantity) INTO sel_maxquantity
  7  FROM OrderDetails;
  8  RETURN sel_maxquantity;
  9  EXCEPTION
 10  WHEN NO_DATA_FOUND THEN
 11  RETURN 0;
 12  WHEN OTHERS THEN
 13  RETURN -1;
 14  END

12.创建程序包,会编写包规范(包头)和包体,实现要求的功能(参看实验7),并进行调用。

SQL> CREATE OR REPLACE  PACKAGE  product_pkg
  2  IS
  3  TYPE prod_row IS RECORD
  4  (prodid Products.ProductID%type,
  5   prodname Products.ProductName%type,
  6   cid Products.CateGoryID%type,
  7   uprice Products.UnitPrice%type,
  8   pdisc Products.Discontinued%type);
  9  PROCEDURE sele_prod(pid IN Products.ProductID%type,
 10              sele_prodrow OUT prod_row);
 11  PROCEDURE update_prod;
 12  FUNCTION max_price(cateid Products.CategoryID%type)
 13  RETURN number;
 14  PROCEDURE out_prod(cateid products.CategoryID%type);
 15  END product_pkg;
 16
 17  /
SQL> create or replace package body product_pkg as
  2  procedure sele_prod(pid in products.productid%type, sele_prodrow  out prod_row) is
  3  begin
  4    select productid, productname, categoryid, unitprice, discontinued into sele_prodrow
  5   from products
  6  where productid=pid;
  7    exception
  8       when no_data_found then
  9  dbms_output.put_line('产品不存在');
 10  end sele_prod;
 11  procedure update_prod   is
 12     no_update exception;
 13  begin
 14    update products
 15    set unitprice=unitprice*0.95
 16    where discontinued='1';
 17    if sql%notfound then
 18        raise no_update;
 19    end if;
 20    exception
 21       when no_update then
 22    dbms_output.put_line('没有打折的产品');
 23  end  update_prod;
 24  function max_price(cateid products.categoryid%type) return number is
 25    mprice number;
 26  begin
 27    select max(unitprice) into mprice
 28    from products where categoryid=cateid;
 29  return mprice;
 30    exception
 31       when no_data_found then
 32       dbms_output.put_line ( '该类产品不存在');
 33           return 0;
 34  end max_price;
 35  procedure out_prod(cateid products.categoryid%type)
 36  is
 37    begin
 38  for p_row  in (select *  from products where categoryid=cateid) loop
 39     dbms_output.put_line('产品编号:'||p_row.productid);
 40     dbms_output.put_line('产品名称:'||p_row.productname);
 41     dbms_output.put_line(' 类别编号:'||p_row.categoryid);
 42     dbms_output.put_line(' 单价:'||p_row.unitprice);
 43  end loop;
 44  end out_prod;
 45  end  product_pkg;
 46  /

程序包体已创建。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页