首页 oracle模拟习题

oracle模拟习题

举报
开通vip

oracle模拟习题一、选择题 1、关于SQL、SQL*Plus、PL/SQL相关于Oracle数据库的说法不正确的是(D ) A.SQL是用来和Oracle交互的工具 B.SQL*Plus是编写SQL和PL/SQL的工具 C.PL/SQL是Oracle提供的过程化语言 D.SQL*PLUS中不能含有SQL语句 2、ORACLE中权限最大的用户是(C) A. system B. admin C. sys D. scott 3、select ename from emp where job=’SALESMAN’ ...

oracle模拟习题
一、选择题 1、关于SQL、SQL*Plus、PL/SQL相关于Oracle数据库的说法不正确的是(D ) A.SQL是用来和Oracle交互的工具 B.SQL*Plus是编写SQL和PL/SQL的工具 C.PL/SQL是Oracle提供的过程化语言 D.SQL*PLUS中不能含有SQL语句 2、ORACLE中权限最大的用户是(C) A. system B. admin C. sys D. scott 3、select ename from emp where job=’SALESMAN’ order by empno desc 的第三条结果是(D ) A. ALLEN B. KING C. SMITH D. WARD 4、执行语句select gongda from emp的执行结果是(D) A. 显示gongda B. 无输出 C. 显示14行工大 D. 报异常 5、执行语句select * from emp where job=’clerk’,得到的结果是(B) A. 输出4行结果 B. 无输出 C. 输出14行结果 D. 报异常 6、PL/SQL中自定义异常编号正确的是(B) A. -01400 B. -20222 C. -01158 D. -1433 7、PL/SQL中,若一条select语句没有返回值,将引发哪个异常(B) A.NO_ROWS_FOUND B.NO_DATA_FOUND C.NO_DATA_ROWS _FOUND D.NO_FIND 8、以下代码哪一行有问题(B) 1 DECLARE 2 v_i NUMBER := &n ; 3 BEGIN 4 IF v_i % 3 = 0 THEN 5 dbms_output.put_line('您输入的数字是:'||v_i||'可以被3整除'); 6 ELSE 7 dbms_output.put_line('您输入的数字是:'||v_i||'不能被3整除'); 8 END IF ; 9 END; A. 第2行 B. 第4行 C. 第6行 D. 哪一行都没错 9、有一段PL/SQL程序如下所示: var1 := 10; LOOP EXIT WHEN var1 > 12; var1 := var1 +1; DBMS_OUTPUT.PUT_LINE(‘A’); .- 1 - END LOOP; 输出的结果为(C ) A.无输出 B.A C.A A D.A A A 10、以下程序执行后的结果是( B ) DECLARE str1 VARCHAR2(4000):='abcdefg_hijklmn'; --g和h之间的下划线代表此处有一个空格 str2 VARCHAR2(4000); str3 VARCHAR2(4000); BEGIN select upper(str1) into str2 from dual; select LENGTH(str1) into str3 from dual; dbms_output.put_line(str2||', '||str3); END; A.无输出 B.ABCDEFG HIJKLMN, 15 C.ABCDEFG HIJKLMN, 14 D.abcdefg hijklmn,15 11、ORACLE中权限最大的用户是(C) A. system B. admin C. sys D. scott 12、oracle 11g默认的日期格式是(A) A. 25-12月-2013 B. 2013-12-25 C. 12-25-2013 D. 25-12-2013 13、执行语句SELECT comm FROM EMP 的执行结果有数字显示的是( A ) A. 4行 B. 无输出 C. 14行 D. 报错 14、如何获得系统当前时间(C) A.sysdate B.select sysdate C.select sysdate from dual D.以上都是 15、执行语句select * from emp where job=’clerk’,得到的结果是(B) A. 输出4行结果 B. 无输出 C. 输出14行结果 D. 报错 16、emp中,deptno是该表的( B ) A. 主键 B. 外键 C. 什么都不是 D. 主键+外键 17、PL/SQL中自定义异常编号正确的是(B) A. -01400 B. -20123 C. -01158 D. -1433 18、PL/SQL中,若一条select语句没有返回值,将引发哪个异常(B) A.NO_ROWS_FOUND B.NO_DATA_FOUND C.NO_DATA_ROWS _FOUND D.NO_FIND 19、有一段PL/SQL程序如下所示: var1 := 10; LOOP EXIT WHEN var1 > 12; var1 := var1 +1; DBMS_OUTPUT.PUT_LINE(‘A’); END LOOP; 输出的结果为(C ) A.无输出 B.A C.A A D.A A A 20、在 Oracle PL/SQL程序中,要从用户输入赋值给数字变量 stuid,下面代码正确的是(C) A.stuid = ‘& stuid ’ B.stuid := “& stuid ” C.stuid : = & stuid D.stuid = & stuid 二、简答题 1、查询出名字中第三个字母是“N”的员工信息 select * from emp where ename like ‘__N%’ 2、查询所有员工工号、姓名、工资、所在部门名称、所在地,按工资降序排列 select emp.empno,emp.ename,emp.sal,dept.dname,dept.loc from emp,dept where emp.deptno=dept.deptno order by emp.sal 3、查询每个部门的员工数量以及该部门名称,将员工数大于4人的部门筛选出来 select dname,count(*) from scott.emp,scott.dept WHERE scott.emp.deptno=scott.dept.deptno group by dname HAVING count(*)>4 4、查询出没有员工的部门信息(部门编号、名称、所在地) SELECT * FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp) 5、查询出工资总数最少部门的部门信息(部门编号、名称、所在地) select * FROM (select dept.deptno,dept.dname,dept.loc,sum(sal) from emp,dept WHERE emp.deptno=dept.deptno group by dept.deptno,dept.dname,dept.loc order by sum(sal)) where rownum<2 6、将所有芝加哥工作的人工资加500,奖金加100 UPDATE emp SET sal=sal+500 , comm=nvl(comm,0)+100 WHERE emp.deptno=(SELECT deptno FROM dept WHERE loc='CHICAGO' ) 7、查询所有员工工号、姓名、工资 select emp.empno,emp.ename,emp.sal from emp 8、查询出每个员工姓名、工资,并按工资降序排列 select ename,sal from emp order by sal desc 9、查询出每个员工的姓名以及部门所在地 select emp.ename,dept.dname FROM emp,dept where emp.deptno=dept.deptno 10、查询出工资总数最少部门的部门信息(部门编号、名称、所在地) select * FROM (select dept.deptno,dept.dname,dept.loc,sum(sal) from emp,dept WHERE emp.deptno=dept.deptno group by dept.deptno,dept.dname,dept.loc order by sum(sal)) where rownum<2 11、将所有在纽约工作的人工资加500,奖金加100 UPDATE emp SET sal=sal+500 , comm=nvl(comm,0)+100 WHERE emp.deptno=(SELECT deptno FROM dept WHERE loc='NEW YORK' ) 12、删除工资最高的两个员工信息 delete from scott.emp where sal in( SELECT sal FROM (SELECT * FROM scott.emp ORDER BY sal desc) WHERE ROWNUM < 3 ) 三、编程题 1、自定义输入任意员工编号,输出该员工编号、姓名、工资、部门名称、所在地,如果输入的编号错误,请进行异常处理。 DECLARE v_empno emp.empno%TYPE; v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; v_dname dept.dname%TYPE; v_loc dept.loc%TYPE; BEGIN v_empno :=&gh; SELECT empno,ename,sal,dname,loc INTO v_empno,v_ename,v_sal,v_dname,v_loc FROM emp,dept WHERE emp.deptno=dept.deptno AND empno=v_empno; dbms_output.put_line('工号'||v_empno||',姓名: '||v_ename||',sal:'||v_sal||',dname:'||v_dname||',loc:'||v_loc); EXCEPTION WHEN no_data_found THEN dbms_output.put_line('该员工号不存在!'); END; 2、自定义输入部门编号,查询出该部门编号下所有员工信息(姓名、工资、部门编号),并显示信息条数。 DECLARE v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; v_deptno emp.deptno%TYPE:=&kkk; CURSOR c_1 IS SELECT emp.ename,emp.sal,emp.deptno FROM emp WHERE deptno=v_deptno; BEGIN OPEN c_1; LOOP FETCH c_1 INTO v_ename,v_sal,v_deptno; IF c_1%FOUND THEN dbms_output.put_line('姓名:'||v_ename||'工资:'||v_sal||'部门编号:'||v_deptno); ELSE dbms_output.put_line('查询完毕!'); dbms_output.put_line('共有:'||c_1%ROWCOUNT||'条记录'); EXIT; END IF; END LOOP; CLOSE c_1; END; 3、编写一个触发器,实现CLERK的工资只能涨不能降,奖金只能涨不能降, 同时也不能删除CLERK人员的信息 CREATE OR REPLACE TRIGGER bbbb BEFORE DELETE OR UPDATE OF sal,comm ON scott.emp FOR EACH ROW WHEN (old.job='CLERK') BEGIN CASE WHEN updating('sal') THEN IF :new.sal < ld.sal THEN raise_application_error(-20111,'CLERK人员工资只能涨不能降'); END IF; WHEN updating('comm') THEN IF :new.comm < ld.comm THEN raise_application_error(-20222,'CLERK人员奖金只能涨不能降'); END IF; WHEN deleting THEN raise_application_error(-20333,'CLERK人员信息不允许删除'); END CASE; END; 4、创建一个存储过程,实现:通过输入员工编号查看员工姓名、工资、奖金;如果输入的编号不存在,进行异常处理;如果工资高于4000,进行异常处理;如果奖金没有或为空,进行异常处理. CREATE OR REPLACE PROCEDURE yuangonginfo(v_no IN NUMBER) AS v_comm NUMBER; v_sal emp.sal%TYPE; BEGIN SELECT emp.comm,emp.sal INTO v_comm,v_sal FROM emp WHERE emp.empno=v_no; IF v_sal > 4000 THEN RAISE_application_error(-20123,'该员工工资4000太高了,裁员第一个考虑'); END IF; IF v_comm IS NULL OR v_comm = 0 THEN RAISE_application_error(-20111,'该员工没有奖金啊!'); END IF; EXCEPTION WHEN no_data_found THEN dbms_output.put_line('您输入的员工编号不存在!'); END yuangonginfo; 5、编写一个PL/SQL程序执行第一题(自定义输入员工编号),捕获第一题(1.2、1.3)抛出的异常,换个提示输出到屏幕上. declare a12 exception; a13 exception; v_no NUMBER; pragma exception_init(a12,-20123); pragma exception_init(a13,-20111); BEGIN v_no := &n ; yuangonginfo(v_no); exception when a12 then dbms_output.put_line('该员工工资居然有4000,靠!'); when a13 then dbms_output.put_line('该员工没有奖金,要给该员工加奖金了!'); end; 6、向dept表中插入10条数据,deptno从51开始,dname从dn51开始,loc从loc51开始 DECLARE v_counter NUMBER := 1; v_deptno dept.deptno%TYPE := '50'; v_dname dept.dname%TYPE; v_dname1 dept.dname%TYPE := 'dn'; v_loc dept.loc%TYPE ; v_loc1 dept.loc%TYPE := 'loc'; BEGIN WHILE v_counter <= 10 LOOP v_counter := v_counter + 1; v_deptno := v_deptno + 1; v_dname := v_dname1|| v_deptno; v_loc := v_loc1 || v_deptno; INSERT INTO dept VALUES(v_deptno,v_dname,v_loc) ; END LOOP; END; 7、编写一个PL/SQL程序,对所有的salesman增加奖金(comm)500,clerk增加600,最终显示员工姓名、工作种类、原奖金、现奖金。 DECLARE CURSOR c IS SELECT ename,job,comm,nvl(comm,0) FROM scott.emp ; v_comm scott.emp.comm%TYPE; v_comm2 scott.emp.comm%TYPE; v_comm3 scott.emp.comm%TYPE; v_job scott.emp.job%TYPE; v_ename scott.emp.ename%TYPE; BEGIN FOR i IN c LOOP v_ename := i.ename; v_job := i.job; v_comm := i.comm; IF v_job='MANAGER' THEN UPDATE scott.emp SET scott.emp.comm=nvl(scott.emp.comm,0) + 500 WHERE scott.emp.ename=v_ename; v_comm2 := nvl(v_comm,0) + 500; dbms_output.put_line(v_ename||'的工种是'||v_job||',原奖金是'||v_comm||',现奖金是: '||v_comm2); ELSIF v_job='CLERK' THEN UPDATE scott.emp SET scott.emp.comm=nvl(scott.emp.comm,0) + 600 WHERE scott.emp.ename=v_ename; v_comm3 := nvl(v_comm,0) + 600; dbms_output.put_line(v_ename||'的工种是'||v_job||',原奖金是'||v_comm||',现奖金是: '||v_comm3); END IF; END LOOP; END; 8、编写一个触发器,实现级联更新,在修改了dept表中的deptno之后,级联、自动修改emp表中的deptno CREATE OR REPLACE TRIGGER aaaa AFTER UPDATE OF deptno ON scott.dept FOR EACH ROW BEGIN UPDATE scott.emp SET scott.emp.deptno= :new.deptno WHERE deptno = old.deptno; END; 9、创建一个存储过程,实现:通过输入员工编号查看员工姓名、工资、奖金;如果输入的编号不存在,进行异常处理;如果工资高于4000,进行异常处理;如果奖金没有或为空,进行异常处理. CREATE OR REPLACE PROCEDURE yuangonginfo(v_no IN NUMBER) AS v_comm NUMBER; v_sal emp.sal%TYPE; BEGIN SELECT emp.comm,emp.sal INTO v_comm,v_sal FROM emp WHERE emp.empno=v_no; IF v_sal > 4000 THEN RAISE_application_error(-20123,'该员工工资4000太高了,裁员第一个考虑'); END IF; IF v_comm IS NULL OR v_comm = 0 THEN RAISE_application_error(-20111,'该员工没有奖金啊!'); END IF; EXCEPTION WHEN no_data_found THEN dbms_output.put_line('您输入的员工编号不存在!'); END yuangonginfo; 10、编写一个PL/SQL程序,以提升2个入职时间最早的职员为MANAGER BEGIN UPDATE scott.emp SET job='MANAGER' WHERE scott.emp.hiredate IN ( SELECT hiredate FROM (SELECT * FROM scott.emp ORDER BY scott.emp.hiredate) WHERE ROWNUM < 3 ); IF SQL%FOUND THEN dbms_output.put_line('数据更新完毕!共更新'||SQL%ROWCOUNT||'条数据'); END IF; END;
本文档为【oracle模拟习题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_589748
暂无简介~
格式:doc
大小:44KB
软件:Word
页数:22
分类:计算机考试
上传时间:2019-01-26
浏览量:27