52.关于模式的描述下列哪一项不正确( )。 C A.表或索引等模式对象一定属于某一个模式
B.在Oracle 数据库中,模式与数据库用户是一一对应的 C.一个表可以属于多个模式 D.一个模式可以拥有多个表
1. Oracle 数据库系统的物理存储结构主要由3 类文件组成,分别为数据文件、
______、控制文件。
2. 如果定义与组有关的搜索条件,可以把________子句添加到SELECT 语中。 3. 在SQL Plus命令行下,查看EMP表的结构应使用________命令。 4. 自定义异常必须使用________语句引发。
5. 如果表中某列的基数比较低,则应该在该列上创建________索引。 6. 在用户连接到数据库后,可以查询数据字典____了解用户所具有的系统权限。 7.使下列SQL 语句中添加适当的表达式或子句,使语句可以正常运行。 SELECT 供应商所在城市,COUNT(供应商编号)
FROM 供应商信息GROUP BY ________ ORDER BY 2 DESC;
8.假设有一个表TEST,它仅包含一个字段DATA。现在创建一个触发器,实现将添加的数据变大写。在下面的空白处填写适当的语句,使之可以正常运行。
Create or replace trigger test_trigger
After________ on ________ for each row Begin
:new.data:=upper(________); End;
9. SYS用户以管理员身份登录后,要授予用户Martin可以对用户Scott用户的EMP表进行查询的权限,请写出授权命令________。(假设Martin用户已存在) 10. 查询itemfile表中itemrate列的信息,要求将数值转化为字符串,并使用当前货币符号作为前缀:Select__ TO_CHAR__ (itemrate, ‘ c99999’) from itemfile; 11. PL/SQL 程序块主要包含3 个主要部分:声明部分、可执行部分和_____部分。 12. 要执行pack_me包中的order_proc过程(有一个输入参数),假设参数值为’002’,可以输入以下命令: execute_ pack_me.order_proc(‘002’);________ 13. __角色__ 是具有名称的一组相关权限的组合。
14. 在多进程Oracle 实例系统中,进程分为 用户进程_、后台进程和服务器进程。
1.假设当前用户是SYS用户以管理员身份登录,现需创建用户LiuBei,口令是shuguo,请写出相应的命令_________ create user Lisa identify by shuguo_____; 2.假设现在用户是SYS用户以管理员身份登录,已知用户账号LiuBei被锁定,需为他解除锁定,请写出相应的命___________ alter user LiuBei account unlock;________ 3.假设现在用户是SYS用户以管理员身份登录,需授予用户LiuBei对SCOTT用户模式下的EMP表进行查询(SELECT)的权限, grant select on scott.emp to LiuBei;___ 4.假设现在用户是SYS用户以管理员身份登录,在SQL Plus的SQL>_提示符下,希望用户LiuBei用shuguo以普通用户身份登录到系统, ___ conn Lisa/ shuguo; 5.假设现在LiuBei在SQL Plus下,以普通用户身份登录到系统,需查看scott模式下emp表的结构,请写出相应的语句____ desc scott.emp;__ 四、并发事物题,理解下面过程,完成表中空白
利用回滚段的特性完成银行提款1000元的操作过程,共有两次事务处理操作, 第1次由于误操作将提款金额输入为10000元,然后马上取消操作,第2次成 功完成提款操作,请完成下表。
表-1 操作过程
状态 1 2 回滚段中动 作 数据 前事务#1 更新储蓄,设置余额=余额-10000 3 4 5 回滚 更新储蓄,设置余额=余额-1000 提交 空 1500 空 (4)____ 空 动作结束后的帐户余额 内存中的数据 其他用户看到的数据 1500 (1)____ (3)____ 500 500 1500 (2)____ 1500 1500 (5)____ -8500 1500 1500 1500 500
五、 编程题:(本题共2小题,共25分)
以下1-3题可能用到的Employee表结构和数据如下图-1:
图-1 Employee表结构和数据
1 .阅读以下程序,理解其功能,完成空白:(每个2分,共10分)
以下程序段实现的是从employee表中读取员工姓名(Ename)、部门编号(DeptNO),并使用游标逐行比较,将部门编号为20的员工部门编号和姓名输出.
Declare (1) _________ --定义游标c_emp_cursor is
select ename,deptno from employee; v_ename employee.ename%type;
v_deptno employee.deptno%type;
begin
(2) _________ ; --打开游标 loop --遍历游标
fetch c_emp_cursor into v_ename, v_deptno; exit when (3) _________ ; if (4) _________ then
dbms_output.put_line(v_deptno||' '|| v_ename); --输出数据
end if; end loop;
(5) _________; --关闭游标 end;
create or replace cursor c_emp_cursor open c_emp_cursor c_emp_cursor%NOTFOUND v_deptno=20 close c_emp_cursor
2.根据图-1 Employee表的结构,完成以下程序的编写:(10分)
编写一个PL/SQL函数get_sal,接受传入参数部门号(v_emp_no),据此来查询获取某雇员的工资。
①请写出程序代码
CREATE OR REPLACE FUNCTION get_sal
(v_emp_no IN employee.empno%TYPE) 3分 RETURN NUMBER 1 分 IS
v_emp_sal employee.sal%TYPE:=0; 2分 BEGIN
SELECT sal
INTO v_emp_sal
FROM employee WHERE empno=v_emp_no; RETURN(v_emp_sal); 4分 END get_sal;
②执行结果测试:
3、请创建一个名称为 change_record的触发器,实现当对emp表更新员工工资之后,将更新纪录保存到表salary_change_record中。(10分)
具体要求如下:
建立日志对薪水的变动情况形成一个追踪,也就是说,如果对某个职员的薪水进行变更就应该将其相应的变更记录全部记下来,将数据记录到表salary_change_record中,salary_change_record结构salary_change_record ( empid,old_salary,new_salary,change_date ),其中old_salary用来纪录员工原来的工资,new_salary用来纪录更新后的工资,change_date记录更新的系统时间。
①请写出程序代码(4分) Create table salary_change_record (empid char(4), Old_salary number(7,2), New_salary number(7,2), Change_date date) )
②请写出创建触发器的语句:(6分) Create or replace trigger change_record After update of sal on employee
For each row 2分 Begin
Insert into salary_change_record
values (:new.empno,:old.sal,:new.sal,sysdate); end; 4分
1.emp表结构如下图所示,请按要求完成以下程序的编写。
表-2 emp表结构
(1) 假设部门号(DeptNo)为10的部门为管理部,请建立一个视图V_Mage,其
功能是选取Emp表中部门号为10的员工信息。(6分)
(2) 假设现需用到一张表update_logs(op_user,op_date,old_value,new_value),其结构如下所示:请写出创建表update_logs的语句,要求主键为op_user,字段类型与宽度下表。(6分) update_logs表结构
1. 编写一个数据库触发器del_dept,当任何时候某个部门从\中删除时,
该触发器将从\表中删除该部门的所有雇员记录。 写出相应的代码:
名称 类型及长度 Deptno Dname Loc Number(2) Varchar2(14) Varchar2(13) 名称 Empno Ename Job Sal Deptno 类型及长度 Number(4) Varchar2(10) Varchar2(9) number(7,2) Number(2)