1、1. ORACLE 数据库物理结构包括以下三种文件,以下不属于的是( )A系统文件B日志文件C数据文件D控制文件2. 下列哪个命令是用于 ORACLE 中数据导出的 ( )Aexp Bimp Cinput Doutput3. ( )是用于控制数据访问的语言。ADML BDDL CDCL DDLL4. NULL 表示什么( )A0 B空格 C值 D没有值5. 下面四个语句中哪一个是正确的?( )A SELECT * , ENAME FROM EMP;B DELETE * FROM EMP;C SELECT DISTINCT EMPNO ,HIREDATE FROM EMP;D SELECT EN
2、AME|SAL AS “name” FROM EMP ;6. 假定有一张表用户表 users,其中一身份证字段 ID_card。为了维护数据的完整性,在设计数据库时,最好对 ID_card 字段添加约束, 请问应该添加什么 约束( )A primary key Bcheck Cdefault Dnot null7. 下面哪一个 like 命令会返回名字象 HOTKA 的行?( )A where ename like _HOT% B where ename like H_T% C where ename like %TKA_ D where ename like %TOK%8. ( )操作符只返
3、回由第一个查询选定但是没有被第二个 查询选定的行。A. UNIONB. UNION ALLC. INTERSECTD. MINUS9EMPLOYEES 表的结构如下:EMPLOYEE_ID NUMBER PRIMARY KEYFIRST_NAME VARCHAR2(25)LAST_NAME VARCHAR2(25)HIRE_DATE DATE考虑下面的语句。1.CREATE table new_emp (employee_id NUMBER,name VARCHAR2(30);2.INSERT INTO new_emp SELECT employee_id,last_name from emp
4、loyees;3.Savepoint s2;4.DELETE from new_emp;5.ROLLBACK to s2;6.DELETE from new_emp where employee_id=180;7.UPDATE new_emp set name=James;8.ROLLBACK to s2;9.UPDATE new_emp set name =JamesWHERE employee_id=180;10.ROLLBACK;完成本次事务处理以后,以下 说法正确的有( )A. 表中没有行。B. 有一个姓名为 James 的员工。C. 不能多次回滚到相同的保存点。D. 由于已经删除了员
5、工 ID180,因此最后一次更新未更新任何行。10以下运算结果不为空值的是( ) A12+NULL B60*NULL CNULLNULL D12/(60+NULL)11若当前日期为25-5 月-06,以下( )表达式能计算出 5 个月后那一天所在月份的最后一天的日期。ANEXT_DAY(ADD_MONTHS(28-5 月-06,5) BNEXT_DAY(MONTHS_BETWEEN(28-5 月-06,5) CLAST_DAY(MONTHS_BETWEEN(28-5 月-06,5) DLAST_DAY(ADD_MONTHS(28-5 月-06,5)12( )子句用于列出唯一值。Aunique
6、Bdistinct Corder by Dgroup by13哪一个是子查询执行的顺 序( )A最里面的查询到最外面的查询B最外面的 查询到最里面的查询C简单查询 到复杂查询D复杂查询到简单查询14下面哪一个语句可以使用子 查询( )ASELECT 语句 BUPDATE 语句 CDELETE 语句 D以上都是15如果表 DEPT 包含 3 条记录 ,现在用如下命令对其进行修改,ALTER TABLE DEPT ADD (COMP NUMBER(4) NOT NULL);请问下面哪一个说法是正确的( )A该语句在表的最前面插入一个非空列B该语 句在表的最后插入一个非空列C该语 句执行完成后, 应
7、当立即执行 COMMIT 语句,以确保更改生效D该语句将产生错误16下列哪个是组合主键的特征( )A每列有唯一的值,但不是 NULL 值B组合有唯一的值,并且其中每列没有 NULL 值C组合的第一列和最后一列有唯一值D组合的第一列和最后一列有唯一值,但没有 NULL 值17当删除父表中的数据时,在 CREATE TABLE 语句的外 键定义中指定的( )选项删除子表中的数据。AON TRUNCATE CASCADE BON DELETE CASCADE CON UPDATE CASCADE DA 和 C 都是18视图可以用于( )A限制对表中指定列的访问 B限制 对表中行的子集的访问 CA 和
8、 B 都是 DA 和 B 都不是19语句 SELECT * FROM dept WHERE NOT EXISTS (SELECT * FROM emp WHERE deptno=dept.deptno)执行后的结果为( )A只显示存在于 EMP 表中的部门全部信息。B只显 示不存在于 EMP 表中的部 门全部信息C未返回任何数据D显示 DEPT 表中的全部信息20已创建序列 S1,若当前值为 2,先执行 3 次 S1.CURRVAL,再执行 3 次 S1.NEXTVAL,最后 S1 的值是( ) A3 B4 C5 D621 数据库中有两个用户 scott 和 myuser,物 资表 wz 是属
9、于 myuser 用户的,但当前用户是scott,要求查询物资表 wz(wno,wname,wtype,wunit)物资单 位 wunit 列为 null 的记录,取结果的前 5 条记录显示,以下正确的 SQL 语句是( ) Aselect*from scott.wz where wunit is null and rownum=100 AND =100 AND order_total5; B. SELECT ENAME FROM EMP1 WHERE HIRE_DATE-SYSDATE5;C. SELECT ENAME FROM EMP1 WHERE (SYSDATE-HIRE_DATE)/
10、3655;D. SELECT ENAME FROM EMP1 WHERE (SYSDATE-HIRE_DATE)*3655;20 在 Oracle 中,使用下列的 语句: CREATE PUBLIC SYNONYM parts FOR Scott.inventory;完成的任务是( )。(选择一项)A. 需要给出 schema 被除去的对象名B. 指定了新的对象权限C. 指定了新的系统权限D. 给 Scott.inventory 对象创 建一个公用同义词 parts21 在 Oracle 中,有一个名为 seq_id 的序列对象,假定此时查看 seq_id 序列当前值显示为100,那么执行下面
11、的 sql insert into test(id, name) values(seq_id.NEXTVAL,tom );很不幸,这个 insert 没有执行成功,随后马上执行 rollback,问:此时查看 seq_id 序列当前值显示为( )选择一项A. 99 B、100C、101 D、不能确定22 PL/SQL 块中不能直接使用的 SQL 命令是( )选一项 A. SELECTB. INSERTC. UPDATED. DROP23 在 PL/SQL 块中,以零作除数 时会引发下列( )异常。( 选择一项)A. VALUE_ERRORB. ZERO_DIVIDEC. VALUE_DIVID
12、ED. ZERO_ERROR24 在 Oracle 中,有一个名为 seq 的序列对象,以下 语句能返回序列 值但不会引起序列值增加的是( )(选择一项)A. select seq.ROWNUM from dual;B. select seq.NEXTVAL from dual;C. select seq.CURRVAL from dual;D. select seq.CURIVAL from dual;25 当 Select Into 语句的返回没有数据时,将引 发下列哪个异常?( )选择一项A. No_Data_FoundB. To_Many_RowC. Too_Many_RowsD. I
13、nvalid_Number26 创建序列时,若未指定 Cycle 选项, 则当前值大于 MaxValue 时将( )选择一项A. 从 MinValue 重新开始循环B. 重复使用 MaxValue 值C. 执行出错D. 使用随机值27 PL/SQL 块中哪几部分是可选的( )选择二项A. DeclareB. BeginC. ExceptionD. 以上均是28 在 Oracle 中,PL/SQL 块 中定义了一个带参数的游标:CURSOR emp_cursor(dnum NUMBER) ISSELECT sal, comm FROM emp WHERE deptno = dnum;那么正确打开
14、此游标的语句是( )(选择两项)E. OPEN emp_cursor(20);F. OPEN emp_cursor FOR 20;G. OPEN emp_cursor USING 20;H. FOR emp_rec IN emp_cursor(20) LOOP END LOOP;29 在 Insert 触发器中可使用的引用有( )选一项A. newB. OldC. :UpdateD. :New 和: Old30 下面哪些是过程中的有效参数模式?( )不定项选择A.IN B. INOUT C.OUT D. OUT IN1.检索部门编号、部门名称、部门所在地及其每个部门的员 工总数。select
15、d.deptno,d.dname,d.loc,count(*) from emp e,dept d where e.deptno=d.deptno group by d.deptno,d.dname,d.loc;2.检索员工和所属经理的姓名。select e.ename 雇员,m.ename 经理 from emp e,emp m where e.mgr=m.empno;3. 检索工资等级处于第四级别的员工的姓名。select e.ename from emp e inner join salgrade s on (e.sal between s.losal and s.hisal) wher
16、e s.grade=4;4.检索工资等级高于 smith 的员工信息。select * from emp e join salgrade s on (e.sal between s.losal and s.hisal) where s.grade(select distinct s.grade from emp e join salgrade s on (select sal from emp where ename=SMITH) between s.losal and s.hisal);5.检索 30 部门中 1980 年 1 月份之前入职的员工信息。 显 示:员工号、 员工名、部门号,部门
17、名、入职日期。select empno,ename,d.deptno,d.dname,hiredate from emp,dept d where emp.deptno=d.deptno and d.deptno=30 and hiredate=3 and num=2000 的所有雇员的详细资料select * from emp where (deptno=10 and job=upper(manager) or (deptno=20 and job=upper(clerk ) or (jobupper(clerk) and sal=2000)4. 找出不收取佣金或收取的佣金低于 100 的雇
18、员select * from emp where nvl(comm,0) (select avg(sal) from emp);8. 显示除 20 部门外,部门平均工 资在 2500 以上的部门 ,列出部 门编号和平均工资。select avg(sal) , deptno from emp where deptno 2500;9. 列出薪金等于部门 30 中员工的薪金的所有员工的姓名和薪金。select * from emp where sal in (select sal from emp where deptno=30);10. 列出所有部门的详细信息和部门人数。select a.*,(s
19、elect count(*) from emp where deptno=a.deptno) tot from dept a ;11. 列出各种工作的最低月收入。select job,min(sal+nvl(comm,0) from emp group by job;12. 返回工资水平(等级)高于平均工资水平的员工详细信息。 select * from emp e join salgrade s on (e.sal between s.losal and s.hisal) where s.grade(select distinct s.grade from emp e join salgra
20、de s on (select avg(sal) from emp) between s.losal and s.hisal);13. 列出至少有两个员工的所有部门信息select * from dept where deptno in (select deptno from emp group by deptno having count(*)1);14. 查询 emp 表的第 6 行到第 10 行内容Select * from (select rownum r,e.* from emp e) where r between 6 and 10;15. 查询入职最早的前 5 到 10 名员工的
21、姓名和入职日期(按年月日格式显示日期)Select ename,to_char(hiredate,yyyy-mm-dd) from (select ename,hiredate,rownum r from (select ename,hiredate from emp order by hiredate ) where rownum=5;16. 编写一 sql 语句,将 7369 号员工的入职日期改为 1997/7/1,工资提高 800 ,其他信息不变。update emp set hiredate=to_date(1997/7/1,yyyy-mm-dd),sal=sal+800 where
22、empno=7369;17. 查询雇员和其直接领导姓名及他们所在部门名称,没有领导的雇员也要列出.select e.ename,ed.dname,m.ename,md.dname from emp e,emp m,dept ed,dept md where e.deptno=ed.deptno and e.mgr=m.empno(+) and m.deptno=md.deptno(+);18. 列出部门编号,部门名称,部门的员工数量,部门的平均工资.select d.deptno,d.dname,t.cou,t.avg from dept d,(select deptno,count(empn
23、o) cou,avg(sal) avg from emp group by deptno) t where d.deptno=t.deptno;19. 定义游标 update_cur,根据职务调整雇员的工资,如果职务为“SALESMAN”或者“ANALYST”工资上调 100 元,如果 职务为“MANAGER”工资上调 200 元,其它职务工资上调 50 元。DECLAREv_job emp.job%TYPE;CURSOR update_curISSELECT jobFROM empFOR UPDATE;BEGINOPEN emp_cur;LOOPFETCH update_cur INTO v
24、_job;EXIT WHEN emp_cur%NOTFOUND;CASEWHEN v_job=SALESMAN OR v_job=ANALYST THENupdate emp set sal=sal+100 where current of emp_cur;WHEN v_job= MANAGER THENupdate emp set sal=sal+200 where current of emp_cur;ELSE update emp set sal=sal+50 where current of emp_cur;END CASE;END LOOP;END;20. 创建一个触发器,使其可以修
25、改 DEPT 表的 DEPTNO。create or replace trigger update_deptafter update on deptfor each rowbeginupdate emp set deptno=:new.deptno where deptno=:old.deptno;end;1. 对所有员工,如果该员工职位是 MANAGER,并且在 DALLAS 工作那么就给他薪金加 15;如果该员工职位是 CLERK,并且在 NEW YORK 工作那么就给他薪金扣除 5;其他情况不作处理。要求:使用游标或函数编程实现。1. set serveroutput on;declar
26、ecursor c1 is select * from emp;c1rec c1%rowtype;v_loc varchar2(20);beginfor c1rec in c1 loopselect loc into v_loc from dept where deptno = c1rec.deptno;if c1rec.job = MANAGER and v_loc = DALLAS thenupdate emp set sal = sal * 1.15 where empno = c1rec.empno;elsif c1rec.job=CLERK and v_loc = NEW YORK
27、thenupdate emp set sal = sal * 0.95 where empno = c1rec.empno;elsenull;end if;end loop; end;2. 用 PL/sql 实现输 出 7369 号 员工的姓名。set serveroutput on; - 将 sql*plus 的输出功能开启declare -声明部分var_empno number(4) := 7369 ; -声明一个变量 var_empno ,并 给赋值,用:= 赋值 var_name varchar2(10); -声明一个变量 var_name var_sal number(9,2);b
28、egin -执行部分的开始select ename ,sal into var_name ,var_sal from emp where empno = var_empno;dbms_output.put_line(var_empno | 的名字是 : | var_name); -输出语句dbms_output.put_line(var_empno | 的工资是 : | var_ sal ); -输出语句end; -执行部分的结束,end 后面要加 ;-执行结果为:7369 的名字是 : SMITH1. 定义游标 update_cur,根据职务调整雇员的工资,如果职务为“SALESMAN”或者
29、“ANALYST”工资上调 100 元,如果职务为“MANAGER”工资上调 200 元,其它职务工资上调 50 元。1. DECLAREv_job emp.job%TYPE;CURSOR update_curISSELECT jobFROM empFOR UPDATE;BEGINOPEN emp_cur;LOOPFETCH update_cur INTO v_job;EXIT WHEN emp_cur%NOTFOUND;CASEWHEN v_job=SALESMAN OR v_job=ANALYST THENupdate emp set sal=sal+100 where current o
30、f emp_cur;WHEN v_job= MANAGER THENupdate emp set sal=sal+200 where current of emp_cur;ELSE update emp set sal=sal+50 where current of emp_cur;END CASE;END LOOP;END;2. 创建一个触发器,使其可以修改 DEPT 表的 DEPTNO。create or replace trigger update_deptafter update on deptfor each rowbeginupdate emp set deptno=:new.deptno where deptno=:old.deptno;end;