ORACLE数据库的相关习题

 

一、选择题:

1. 以下不是数据库特点的是:

        A.  高速数据传输    B.  较高的数据独立性

        C.  较小的数据冗余  D.  多用户数据共享

2.SQL语言中用来创建、删除及修改数据库对象的部分被称为:

        A. 数据库控制语言(DCL)      B. 数据库定义语言(DDL)

        C. 数据库操纵语言(DML)      D. 数据库事务处理语言

3、以下语句的作用是:

        SELECT ename,sal FROM emp

        WHERE sal<(SELECT min(sal) FROM emp) + 1000;

        A. 显示工资低于1000元的雇员信息

        B. 将雇员工资小于1000元的工资增加1000后显示

        C. 显示超过最低工资1000元的雇员信息

        D. 显示不超过最低工资1000元的雇员信息

4、表的主键特点中,说法错误的是:

        A. 一个表只能定义一个主键(可以有多个外键          

        B. 主键可以定义在表级或列级

        C. 主键的每一列都必须非空  

        D. 主键的每一列都必须惟一

5. 用来存放可变长度字符串的函数是:

        A.  CHAR        B.  VARCHAR2

        C.  NUMBER      D.  BOOLEAN

6、在程序中正确的变量定义语句是:

            A.  emp_record emp.ename%ROWTYPE

            B.  emp_record emp%ROWTYPE

            C.  v_ename  emp%TYPE

            D.  v_ename  ename%TYPE

7、以下表达式的结果非空的是:

            A.  NULL||NULL             B.  'NULL'||NULL

            C.  3+NULL                  D.  (5>NULL)

8、在程序中必须书写的语句是:

        A.  SET SERVEROUTPUT ON             B.  DECLARE

        C.  BEGIN                           D. EXCEPTION

9、有关游标的论述,正确的是:

            A.  隐式游标属性%FOUND代表操作成功

            B.  显式游标的名称为SQL

            C.  隐式游标也能返回多行查询结果

            D.  可以为UPDATE语句定义一个显式游标

10. 下列有关触发器和存储过程的描述,正确的是:

        A. 两者都可以传递参数

        B. 两者都可以被其他程序调用

        C. 两种模块中都可以包含数据库事务语句

        D. 两者创建的系统权限不同

ABDDBBBCDD  

二、填空题:

1、数据库系统的发展经历了  层次       模型、   网状   模型及 关系    模型几个阶段。当今应用最普遍的是   关系    数据库管理系统。

2、.如果要求学生关系S(SNO,NAME,SEX,AGE)中存储的学生信息满足下列条件:男生(SEX=‘F’)的年龄在15-60岁之间,女生(SEX=‘M’)的年龄在15-55岁之间。那么在关系S的定义中加入的检查子句正确的是

      Check(sex = ‘F’ and (age>=15and age<=60)) or (sex =’M’ and (age>=15and age<=55))                                                                     

3、.在SQL语言中,用于测试列值非空的语句是(    B   )

A. IS NOT EMPTY                                      B.IS NOT NULL

C. NOT UNIQUE                                        D.NOT EXISTS

4、.针对数据库系统,写出下面英文缩写的中文名称或含义:

C/S:___客服端与服务器__________ DML:__数据操作语言___________。

5、SELECT ename, job,sal FROM emp WHERE sal>=3000;

该查询语句的功能:                                                         

6、显示部门10和部门20中工资小于1500的雇员。

         Select *from emp where (depno =10 or deptno =20 )and sal <1500                

7、显示姓名以“S”开头的雇员信息。

    select * from emp where ename like'S%’          

8、查询比SCOTT工资高的雇员名字和工资。

        Select ename.sal from emp where sal>(select sal from emp where ename =’ SCOTT’);

三、编程题:(10*4)

1、查询和SCOTT同一部门且比他工资低的雇员名字和工资。

Select ename ,sal from emp where deptono =(select deptno from emp where ename = ‘scott’)and sal<(slect sal from emp where ename =’scott);

2、向dept表中插入一条部门信息:部门编号(deptno)为60,部门名称(dname)为“经理部”,部门所在地(loc)“南阳市”

Insert into dept(deptno,dname,loc) values(60,’ 经理部’,’ 南阳市’);

3、编写给雇员增加工资的存储过程CHANGE_SALARY,通过IN类型的参数传递要增加工资的雇员编号和增加的工资额。

Create or replace procedure change_salay(v_empno in number,v_sal in number)

As

Begin

Update emp set sal = sal+v_sal where empno = v_empno;

End;

 

 

 

编写给雇员增加工资的存储过程CHANGE_SALARY,通过IN类型的参数传递要增加工资的雇员编号和增加的工资额。

        步骤1:登录SCOTT账户。

          步骤2:在SQL*Plus输入区中输入以下存储过程并执行:

        CREATE OR REPLACE PROCEDURE CHANGE_SALARY(P_EMPNO IN NUMBER DEFAULT 7788,P_RAISE NUMBER DEFAULT 10)

        AS

         V_ENAME VARCHAR2(10);

V_SAL NUMBER(5);

        BEGIN

        SELECT ENAME,SAL INTO V_ENAME,V_SAL FROM EMP WHERE EMPNO=P_EMPNO;

         UPDATE EMP SET SAL=SAL+P_RAISE WHERE EMPNO=P_EMPNO;

         DBMS_OUTPUT.PUT_LINE('雇员'||V_ENAME||'的工资被改为'||TO_CHAR(V_SAL+P_RAISE));

COMMIT;

        EXCEPTION

         WHEN OTHERS THEN

        DBMS_OUTPUT.PUT_LINE('发生错误,修改失败!');

        ROLLBACK;

        END;

 

4.创建一个通过雇员编号返回雇员名称的函数GET_EMP_NAME。

 

Create or replace function get_emp_name(v_empno number)

Return varchar2

As

V_ename varchar2(20);

Begin

Select ename into v_ename from emp where empno = v_empno;

Return v_ename;

End;

 

 

 

 

 

创建一个通过雇员编号返回雇员名称的函数GET_EMP_NAME。

        步骤1:登录SCOTT账户。

        步骤2:在SQL*Plus输入区中输入以下存储函数并编译:

        CREATE OR REPLACE FUNCTION GET_EMP_NAME(P_EMPNO NUMBER DEFAULT 7788)

        RETURN VARCHAR2

        AS

         V_ENAME VARCHAR2(10);

        BEGIN

        SELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO=P_EMPNO;

RETURN(V_ENAME);

EXCEPTION

 WHEN NO_DATA_FOUND THEN

  DBMS_OUTPUT.PUT_LINE('没有该编号雇员!');

  RETURN (NULL);

 WHEN TOO_MANY_ROWS THEN

  DBMS_OUTPUT.PUT_LINE('有重复雇员编号!');

  RETURN (NULL);

 WHEN OTHERS THEN

  DBMS_OUTPUT.PUT_LINE('发生其他错误!');

  RETURN (NULL);

END;

 

 

你可能感兴趣的:(oracle,数据库,exception,null,存储,语言)