一、选择题:
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;