ORACLE数据库习题_第1页
ORACLE数据库习题_第2页
ORACLE数据库习题_第3页
ORACLE数据库习题_第4页
ORACLE数据库习题_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选文档 18 1.ORACLE数据库物理结构包括以下三种文件,以下不属于的是( A 系统文件 B 日志文件 C. 数据文件 D. 控制文件 2. 下列哪个命令是用于 ORACLE中数据导出的() A. exp B. imp C . input D . out put 3. ()是用于控制数据访问的语言。 A. DML B . DDL C . DCL D . DLL 4. NULL表示什么() C 值D 没有值 ?() SELECT * , ENAME FROM EMP; DELETE * FROM EMP; SELECT DISTINCT EMPNO ,HIREDATE FROM EMP;

2、SELECT ENAME|SAL AS “ name FROM EMP ; A . 0 B.空格 5. 下面四个语句中哪一个是正确的 A . c. B . D . 6. 假定有一张表用户表users,其中一身份证字段ID_card。为了维护数据的完整性,在设计 数据库时,最好对ID_card字段添加约束,请问应该添加什么约束() A . Primary keyB . check C . default D . notnull 7. 下面哪一个like命令会返回名字象HOTKA的行?() where en ame like where en ame like _HOT% H_T% %TKA_ %

3、TOK% A . where en ame like where en ame like B . C . D . 8. ()操作符只返回由第一个查询选定但是没有被第二个查询选定的行。 A. UNION B. UNION ALL C. INTERSECT D. MINUS 9 . EMPLOYEES表的结构如下: NUMBER PRIMARY KEY VARCHAR2(25) VARCHAR2(25) DATE EMPLO YEE_ID FIRST_NAME LAST_NAME HIRE_DATE 考虑下面的语句。 1. CREATE table n ew_e mp (em plo yee_id

4、 NUMBER, name VARCHAR2(30); 2.INSERT INTO n ew_e mp SELECT emp loyee_id,last_ name from emp loyees; 3.Save point s2; 4. DELETE from n ew_e mp; 5. ROLLBACK to s2; 6. DELETE from n ew_e mp where empio yee_id=180; 7. UPDATE n ew_e mp set n ame= 8. ROLLBACK to s2; 9. UPDATE n ew_e mp set n ame = 10. ROL

5、LBACK; 完成本次事务处理以后,以下说法正确的有 A. 表中没有行。 B. 有一个姓名为 James的员工。 C. 不能多次回滚到相同的保存点。 D. 10. A. B. C. D. 11. James; James WHERE employee_id=180; 由于已经删除了员工ID180 ,因此最后一次更新未更新任何行。 以下运算结果不为空值的是() 12+NULL 60*NULL NULLII NULL 12/ (60+NULL ) 若当前日期为2-5月-06以下()表达式能计算出5个月后那一天所在月份的最后 天的日期。 A. B. C. D. 12. A. 13. A. B . C

6、 . D . 14 . NEXT_DAY(ADD_MONTHS28-5 月-06 ,5) NEXT_D AY(MONTHS_BETWEEN28 -5 月-06 ,5) LAST_DAY(MONTHS_BETWEEI28-5 月-06 ,5) LAST_DAY(ADD_MONTHS28-5 月-06 ,5) ()子句用于列出唯一值。 unique B . dist inctC . order by D . group by 哪一个是子查询执行的顺序() 最里面的查询到最外面的查询 最外面的查询到最里面的查询 简单查询到复杂查询 复杂查询到简单查询 下面哪一个语句可以使用子查询() B . UPD

7、ATE 语句 D.以上都是 A . SELECT 语句 C . DELETE 语句 15 .如果表DEPT包含3条记录,现在用如下命令对其进行修改, ALTER TABLE DEPT ADD (COMP NUMBER (4) NOT NULL ); 请问下面哪一个说法是正确的() A . B . C . D . 该语句在表的最前面插入一个非空列 该语句在表的最后插入一个非空列 该语句执行完成后,应当立即执行COMMIT语句,以确保更改生效 16 .下列哪个是组合主键的特征() A . B . C . D . 该语句将产生错误 每列有唯一的值,但不是 NULL值 组合有唯一的值,并且其中每列没有

8、NULL值 组合的第一列和最后一列有唯一值 组合的第一列和最后一列有唯一值,但没有NULL值 ON TRUNCATE CASCADE ON DELETE CASCADE ON UPDATE CASCADE A和C都是 视图可以用于() 限制对表中指定列的访问 限制对表中行的子集的访问 A 和 B 都是 A 和 B 都不是 17当删除父表中的数据时,在 CREATE TABLE 语句的外键定义中指定的()选项删除子 表中的数据。 A B C D 18 A B C D 只显示存在于 EMP 表中的部门全部信息。 只显示不存在于 EMP 表中的部门全部信息 未返回任何数据 显示 DEPT 表中的全部

9、信息 19语句 SELECT * FROM dept WHERE NOT EXISTS (SELECT * FROM emp WHERE deptn o=de pt.de ptn o)执行后的结果为() A B C D 20. 已创建序列 S1,若当前值为2,先执行3次S1.CURRVAL,再执行3次 S1.NEXTVAL ,最后 S1 的值是() A3B4 C5D6 select*from scott.wz where wunit is null and rownum5 ; select*from myuser.wz where wunit = null and rownum5 ; sele

10、ct*from myuser.wz where wunit is null and rownum6 ; select*form scott.wz where wunit is null and rownum=100 AND =100 AND order_total5; B. SELECT ENAME FROM EMP1 WHERE HIRE_DATE-S YSDATE5; C. SELECT ENAME FROM EMP1 WHERE (SY SDATE-HIRE_DATE)/3655; D. SELECT ENAME FROM EMP1 WHERE (SY SDATE-HIRE_DATE)*

11、3655; 20. 在Oracle中,使用下列的语句: CREATE PUBLIC SYNONYM parts FOR Scott. in ve ntory; 完成的任务是()。(选择一项) A. 需要给出schema被除去的对象名 B. 指定了新的对象权限 C. 指定了新的系统权限 D. 给Scott.inventory对象创建一个公用同义词 parts 21在Oracle中,有一个名为seq_id的序列对象,假定此时查看seq_id序列当前值显示为 100,那么执行下面的sql insert into test(id, name) values(seq_id.NEXTVAL , tom);

12、 rollback,问:此时查看 seq_id序列当前 很不幸,这个insert没有执行成功,随后马上执行 值显示为()选择一项 A. 99B、100 C、101D、不能确定 选一项 22. PL/SQL块中不能直接使用的 SQL命令是() A. SELECT B. INSERT C. UPDATE D. DROP )异常。(选择一项) 23在PL/SQL块中,以零作除数时会引发下列( A. VALUE_ERROR B. ZERO DIVIDE C. VALUE_DIVIDE D. ZERO_ERROR 24. 在Oracle中,有一个名为seq的序列对象,以下语句能返回序列值但不会引起序列值

13、增 加的是( )(选择一项) 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_Found B. To_Many_Row C. Too_Many_Rows D. Invalid_Number 26创建序列时,若未指定 Cycle 选项,则当前值大于 MaxValue 时将()

14、选择一项 A. 从 MinValue 重新开始循环 B. 重复使用MaxValue值 C. 执行出错 D. 使用随机值 27 PL/SQL 块中哪几部分是可选的()选择二项 A. Declare B. Begin C. Exception D .以上均是 28. 在Oracle中,PL/SQL块中定义了一个带参数的游标: CURSOR emp_cursor(dnum NUMBER) IS SELECT sal, comm FROM emp WHERE deptno = dnum; 那么正确打开此游标的语句是()(选择两项) E. OPEN emp_cursor(20); F. OPEN emp

15、_cursor FOR 20; G. OPEN emp_cursor USING 20; H. FOR emp_rec IN emp_cursor(20) LOOP END LOOP; 29在 Insert 触发器中可使用的引用有()选一项 A. new B. Old C. :Update D. :New 和:Old )不定项选择 30下面哪些是过程中的有效参数模式?( A.IN B. INOUT C.OUT D. OUT IN I. 检索部门编号、部门名称、部门所在地及其每个部门的员工总数。 select d.deptno,d.dname,d.loc,count(*) from emp e,

16、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) where s.grade=4; 4. 检索工资等级高于 smith 的员工信息。 s

17、elect * 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月份之前入职的员工信息。显示:员工号、员工名、部门号,部 门名、入职日期。 select empno,ename,d.deptno,d.d

18、name,hiredate from emp,dept d where emp.deptno=d.deptno and d.deptno=30 and hiredateto_date(1980-01-01,yyyy-mm-dd) ; 6. 检索雇员的雇佣日期早于其经理雇佣日期的员工及其经理姓名。 select e.ename雇员,m.ename经理,e.HIREDATE雇员的雇佣日期,m.hiredate经理雇佣日期from emp e,emp m where e.mgr=m.empno and e.hiredate=3 and num=8; 14. 检索与 30 部门员工工资等级相同的员工姓

19、名与工资。 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 avg(sal) from emp where deptno=30) between s.LOSAL and s.HISAL); 15. 求分段显示薪水的个数。显示结果如下: DEPTNO 800-2000 2001-5000 30 20 10 select t1.deptno, 8

20、00-2000, 2001-5000 from ( select deptno , count(*) as 800-2000 from emp where sal between 800 and 2000 group by deptno ) t1 join ( select deptno , count(*) as 2001-5000 from emp where sal between 2001 and 5000 group by deptno) t2 on t1.deptno = t2.deptno; 16. 用PL/sql实现输出7369号员工的姓名。 -用 PL/sql 实现输出 73

21、69 员工的姓名; set serveroutput on;- 将 sql*plus 的输出功能开启 declare-声明部分 var_empno number(4) := 7369 ;- 声明一个变量 var_empno ,并给赋值,用 := 赋值 var_name varchar2(10);-声明一个变量 var_name var_sal number(9,2); begin-执行部分的开始 - 输出语句 -输出语句 select ename,sal into var_name , var_sal from emp where empno = var_empno; dbms_output.

22、put_line(var_empno | 的名字是 : | var_name); dbms_output.put_line(var_empno | 的工资是 : | var_ sal ); end;-执行部分的结束,end后面要加; 执行结果为: 7369 的名字是 : SMITH PL/SQL 过程已成功完成。 工资提高 800 ,其他信息不 17. 编写一 sql 语句,将 7369 号员工的入职日期改为 1997/7/1, 变。 update emp set hiredate=to_date(1997/7/1,yyyy-mm-dd),sal=sal+800 where empno=736

23、9; 18. 假定现在有一张表,表名为 T_emp ,其表结构和现有的 emp 表结构完全相同,但是 T_emp中没有记录,请编写一 sql语句,实现将emp中部门编号为20的员工信息添加到 T_emp 中。 19. 对所有员工 ,如果该员工职位是 MANAGER ,并且在 DALLAS 工作那么就给他薪金加 15; 如果该员工职位是 CLERK ,并且在 NEW YORK 工作那么就给他薪金扣除 5;其他情况不作 处理。要求:使用游标或函数编程实现。 set serveroutput on; declare cursor c1 is select * from emp; c1rec c1%r

24、owtype; v_loc varchar2(20); begin for c1rec in c1 loop select loc into v_loc from dept where deptno = c1rec.deptno; if c1rec.job = MANAGER and v_loc = DALLAS then update emp set sal = sal * 1.15 where empno = c1rec.empno; elsif c1rec.job=CLERK and v_loc = NEW YORK then update emp set sal = sal * 0.9

25、5 where empno = c1rec.empno; else null; end if; end loop; end; 20. 对直接上级是 BLAKE 的所有员工,按照参加工作的时间加薪: 1981年6月以前入职的员 工加薪 10、 1981年 6月以后入职的员工加薪 5。 要求:使用游标或函数编程实现。 declare cursor c1 is select * from emp where mgr = (select empno from emp where ename=BLAKE); - 直接上级是 BLAKE 的所有员工 c1rec c1%rowtype; begin for

26、c1rec in c1 loop if c1rec.hiredate =2000 的所有雇员的详细资料 select * from emp where (deptno=10 and job=upper(manager) or (deptno=20 and job=upper(clerk ) or (jobupper( manager ) and jobupper( clerk ) and sal=2000) 4. 找出不收取佣金或收取的佣金低于 100 的雇员 select * from emp where nvl(comm,0) (select avg(sal) from emp); 8.

27、显示除 20部门外,部门平均工资在2500以上的部门,列出部门编号和平均工资。 select avg(sal) , deptno from emp where deptno 20 group by deptno having avg(sal) 2500; 9. 列出薪金等于部门 30 中员工的薪金的所有员工的姓名和薪金。 select * from emp where sal in (select sal from emp where deptno=30); 10. 列出所有部门的详细信息和部门人数。 select a.*,(select count(*) from emp where dep

28、tno=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 salgrade s on (select avg(sal) fro

29、m 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名员工的姓名和入职日期(按年月日格式显示日期) Select enam

30、e,to_char(hiredate,-m m-ddyyyy) 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 empno=7369; 17. 查询雇员和其直接领导姓

31、名及他们所在部门名称,没有领导的雇员也要列出 . 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(empno) cou,avg(sal) av

32、g from emp group by deptno) t where d.deptno=t.deptno; 19. 定义游标update_cur,根据职务调整雇员的工资,如果职务为“ SALESMAN或者 “ ANALYST工资上调100元,如果职务为 “ MANAGE”工资上调200元,其它职务工资上调 50 元。 DECLARE v_job emp.job%TYPE; CURSOR update_cur IS SELECT job FROM emp FOR UPDATE; BEGIN OPEN emp_cur; LOOP FETCH update_cur INTO v_job; EXIT

33、 WHEN emp_cur%NOTFOUND; CASE WHEN v_job=SALESMAN OR v_job=ANALYST THEN update emp set sal=sal+100 where current of emp_cur; WHEN v_job= MANAGER THEN update 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. 创建一个触发器,使其可以

34、修改 DEPT 表的 DEPTNO 。 create or replace trigger update_dept after update on dept for each row begin update emp set deptno=:new.deptno where deptno=:old.deptno; 精选文档 end; 对所有员工,如果该员工职位是 MANAGER,并且在DALLAS工作那么 就给他薪金加15%; 如果该员工职位是 CLERK,并且在NEW YORK工作那么就给他薪金扣 除5% ;其他情况不作处理。要求:使用游标或函数编程实现。 1. set serverout

35、put on; declare cursor c1 is select * from emp; c1rec c1%rowt ype; v_loc varchar2(20); begi n for c1rec in c1 loop select loc into v_loc from dept where deptno = c1rec.de ptno; if drec.job = MANAGER and v_loc = DALLAS the n up date emp set sal = sal * 1.15 where empno = c1rec.e mpno; elsif c1rec.job=CLERK and v_loc = NEW Y ORK the n up date emp set sal = sal * 0.95 where empno = c1rec.e mpno; else n ull; end if; end loo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论