ORACLE数据库习题.doc_第1页
ORACLE数据库习题.doc_第2页
ORACLE数据库习题.doc_第3页
ORACLE数据库习题.doc_第4页
ORACLE数据库习题.doc_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

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

文档简介

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 ENAME|SAL AS “name” FROM EMP ;6. 假定有一张表用户表users,其中一身份证字段ID_card。为了维护数据的完整性,在设计数据库时,最好对ID_card字段添加约束,请问应该添加什么约束()A primary keyBcheck CdefaultDnot 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. ()操作符只返回由第一个查询选定但是没有被第二个查询选定的行。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 employees;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. 由于已经删除了员工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 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该语句执行完成后,应当立即执行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和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是属于myuser用户的,但当前用户是scott,要求查询物资表wz(wno,wname,wtype,wunit)物资单位wunit列为null的记录,取结果的前5条记录显示,以下正确的SQL语句是( ) Aselect*from scott.wz where wunit is null and rownum5;Bselect*from myuser.wz where wunit = null and rownum5;Cselect*from myuser.wz where wunit is null and rownum6; Dselect*form 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)/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,那么执行下面的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_DIVIDED. 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. Invalid_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;那么正确打开此游标的语句是()(选择两项)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 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) where 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月份之前入职的员工信息。显示:员工号、员工名、部门号,部门名、入职日期。select empno,ename,d.deptno,d.dname,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部门员工工资等级相同的员工姓名与工资。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 5 1 20 2 3 10 1 2selectt1.deptno,800-2000,2001-5000from ( selectdeptno,count(*)as800-2000fromempwheresalbetween800and2000 groupbydeptno )t1 join( selectdeptno,count(*)as2001-5000fromempwheresalbetween2001and5000 groupbydeptno)t2 on t1.deptno=t2.deptno;16. 用PL/sql实现输出7369号员工的姓名。-用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);begin -执行部分的开始 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 的名字是 : SMITHPL/SQL 过程已成功完成。17.编写一sql语句,将7369号员工的入职日期改为1997/7/1,工资提高800 ,其他信息不变。update emp set hiredate=to_date(1997/7/1,yyyy-mm-dd),sal=sal+800 where empno=7369;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%rowtype; 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.95 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 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. 显示除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 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 salgrade 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名员工的姓名和入职日期(按年月日格式显示日期)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 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(empno) cou,avg(sal) avg from emp group by deptno) t where d.deptno=t.deptno;19. 定义游标update_cur,根据职务调整雇员的工资,如果职务为“SALESMAN”或者“ANALYST”工资上调100元,如果职务为“MANAGER”工资上调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 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. 创建一个触发器,使其可以修改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;declare cursor c1 is select * from emp; c1rec c1%ro

温馨提示

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

评论

0/150

提交评论