oracle常见面试题及答案

发布时间:2011-04-03 10:31:32   来源:文档文库   
字号:

需求: 写一个邮件系统, 采用oracle+jsp+servlet来完成.

1. 创建一个表空间。

2. 创建一个用户,将用户赋到表空间上.

3. 给用户赋权限.

4. 以新建用户登录,创建一个程序包.

5. 在表空间上建表,两个表

用户表

Id int

Uname varchar

Upass varchar

邮件表

eId int

Title varchar

Contents varchar

Uid int 外键

附件表

Id int

Filepath varchar

Eid int 外键

6. 作增,删,改,查的操作,全部封装到存储过程中

7. 写一个java程序来调用.

1    解释FUNCTIONPROCEDUREPACKAGE区别

答:function procedurePL/SQL代码的集合,通常为了完成一个任务。procedure 不需要返回任何值, function将返回一个值. 在另一方面,Package是为了完成一个商业功能的一组functionprocedure的集合。

2    取某个序列的当前值的PL/SQL语句怎么写?

答:SELECT 序列名.CURRVAL  FROM  DUAL

Create sequence 名字 start with x increment by y maxvalue z nocycle

3    说明ORACLE数据库实例与ORACLE用户的关系?

答:实例可以包含多个用户,一个用户只能在一个实例下

4    创建用户时,需要赋予新用户什么权限才能使它连上数据库?

答:grant CONNECT [on 表名] to 用户名

5.比较truncatedelete命令?

答:两者都可以用来删除表中所有的记录。区别在于:truncateDDLdata defining language数据定义语言),它移动HWK,不需要rollback segment(处理事务回滚操作)而DeleteDMLdata manufacturing language数据操作语言)操作,需要rollback segment(处理事务回滚操作)且花费较长时间

6.给出数据的相关约束类型?

答:主键约束,外键约束,非空约束,唯一约束,检查约束。

7.说明索引的类型与作用?

答:索引类型上分为聚集索引,非聚集索引. 其作用是加快查询速度。

8.获取某个字符字段的最后3个字符的函数是什么?

答:select substr (字段,(length(字段)-3)) from

9.取当前系统时间点日期(不包括年月)的SQL写法是怎样的?

答:Select substr (to_char(sysdate,’YYYYMMDDh24hh:MM:SS’),5) from dual;

to_char(sysdate,’YYYYMMDDh24hh:MM:SS’)

10.返回大于等于N的最小整数值?

答:select ceil(1.5) from dual;

floor(1.5)

11.将根据字符查询转换后结果,规则为:’A’转换为’B’转换为,其他字符转换为未知,请用一个SQL语句写出。

答:select decode(字符,’A’,’’,’B’,’’,’未知’) from dual;

12.如何搜索出前N条记录?

答:select * from where  Rownum <= N;

13.如何搜索出第NM条记录?

答:select * from where Rownum <= 100 Minus select * from where Rownum <= 90;

Select * from ( Select rownum rn, t.* from (Select * from 表名) t where rownum<=大值 ) where rn>=小值

14.有一个数据表(TEST),字段如下:

ID      number

PARENT_ID      number

NAME      Varchar(20)

请使用PL/SQL来按父子层次关系查询出该表的所有数据

答:Select * from test a, test b Where a.parent_id = b.id;

15.怎样用SQL语句实现查找一列中的第N大值?

答:select * from (select * from order by 列名 Desc) where Rownum <= N Minus select * from (select * from order by 列名 Desc) where Rownum <= N-1;

select * from order by 列名 Desc

1 2 3 4 5 6 7 8 9

9 8 7

8 9

请按要求写出下列题目的答案:

表结构

EMP

DEPT

列名称

定义

列名称

定义

Empno

NUMBER(4),PK

Deptno

NUMBER(2)

Ename

VARCHAR2(10)

Dname

VARCHAR2(14)

Job

VARCHAR2(9)

Loc

VARCHAR2(13)

Mgr

NUMBER(4)

Hiredate

DATE

Sal

NUMBER(7,2)

Comm

NUMBER(7,2)

Deptno

NUMBER(2),FK

Empno—-雇员编号

Ename—-雇员名

Job—-工作类型

Mgr—-雇员的经理

Hiredate—-雇用日期

Sal—-每月工资

Comm—-销售奖金

Deptno—-部门编号

Dname—-部门名

Loc—-地址

17.下面哪两个查询可以用来确定员工Blake所在部门的名称? B C E

a. SELECT dname FROM dept WHERE ename =(‘BLAKE’)

b. SELECT d. dname FROM dept d NATURAL JOIN emp e

WHERE e.ename =‘BLAKE’ (主健和外键的名称和类型必须完全相等)

c. SELECT dname FROM dept d,emp e

WHERE e.ename =‘BLAKE’

AND d.deptno = e.deptno

d. SELECT dname FROM dept JOIN emp USING (dname)

WHERE ename =‘BLAKE’

e. SELECT dname FROM dept JOIN emp

ON dept.deptno = emp.deptno

WHERE ename =‘BLAKE’

18. 如果Sal包含各个员工的月薪,那么下面哪一个查询将显示EMP表中的各个员工的年薪? ( d )

a. SELECT sal * 12 ‘Annual Salary’FROM emp;

b. SELECT salary * 12 ‘annual FROM emp;

c. SELECT annual sal * 12 FROM emp;

d. SELECT sal * 12 FROM emp;

19.下面哪一个查询将显示存储在EMP表中的所有数据? A

a. SELECT * FROM emp;

b. SELECT % FROM emp;

c. SELECT ^ FROM emp;

d. SELECT _ FROM emp;

20.在执行下面的查询时,下面哪能一种说法反映了将会发生的情况? B

SELECT ename fROM emp e,emp m WHERE e.mgr = m.empno;

a. 这个查询将产生一个自我联接,显示各个员工的经理的姓名

b. 将显示一个多义性错误,并且不会执行这个语句

c. 这个查询将执行一个完全外部联接,并显示没有为其指定经理的员工的姓名

d. 这个查询将执行一个右外部联接,显示不是经理的员工的姓名

21.下面哪些关键字可以用来创建一个不等连接?选出所有正确的选项. E

a. NATURAL JOIN

b. JOIN… USING

c. OUTER JOIN

d. JOIN… ON

e. 以上都不可以—-使用任何JOIN关键字都不能创建不等连接

22.下面哪一个查询只返回包含DEPT表中而没有在EMP表中列出的部门号? C

a. SELECT deptno FROM dept NATURAL JOIN emp WHERE deptno NOT IN emp;

b. SELECT deptno FROM dept MINUS deptno FROM emp;

c. SELECT deptno FROM dept MINUS SELECT deptno FROM emp;

d. SELECT deptno FROM dept JOIN emp ON dept.deptno<>emp.deptno;

e. SELECT deptno FROM emp MINUS SELECT deptno FROM dept;

23.下面哪一个查询将显示名为King的员工的工号? A

a. SELECT empno FROM emp WHERE ename = ‘% KING’;

b. SELECT empno FROM emp WHERE ename = ‘_ ING’;

c. SELECT empno FROM emp WHERE ename LIKE KING;

d. SELECT empno FROM emp WHERE ename = KING;

e. 上查询都不对

24.下面哪一个查询将显示销售部在1981年聘用的所有员工? B

a. SELECT * FROM emp WHERE dname =’SALES’AND hiredate LIKE’%81′;

b. SELECT * FROM emp NATURAL JOIN dept WHERE dname =’SALES’AND hiredate LIKE’%81′;

c. SELECT * FROM emp WHERE dname =’SALES’OR hiredate LIKE’%81′;

d. SELECT * FROM emp NATURAL JOIN dept WHERE dname =’SALES’AND hiredate LIKE’%1981′;

25.下面哪一个查询将显示存储在EMP表中的各个员工的姓名和职务?选择所有正确的查询. C

a. SELECT ename,job AS”Job Title”FROM emp;

b. SELECT ename,job “Job Title”FROM emp;

c. SELECT ename,job FROM emp;

d. SELECT ename,job ‘Job TITLE’FROM emp;

e. SELECT ename,job ‘Job Title’FROM emp;

26.下面哪一种说法最准确地说明了下面的SELECT语句的结果? A

SELECT DISTINCT job,ename FROM emp;

a. 结果中返回的每一行都是惟一的

b. 各个职务在结果中只显示一次

c. 各个职务将只显示一次,并随之显示具有该职务的各个员工的姓名

d. 结果将按照员工姓名排序

27.下面哪一个子句用来选择表中的某些列? A

a. SELECT

b. FROM

c. WHERE

d. ORDER BY

28.下面哪一个查询将显示年薪至少为10000美元的所有员工的姓名? D

a. SELECT ename FROM emp WHERE sal*12>10,000;

b. SELECT ename FROM emp WHERE sal*12>’10,000′;

c. SELECT ename FROM emp WHERE sal*12=>10000;

d. SELECT ename FROM emp WHERE sal*12>=10000.00;

e. 上面的语句都不正确

29.下面哪些查询将按照员工姓名的顺序显示各个员工的号码?选出所有正确的查询.

a. SELECT ename,ename FROM emp ORDER BY empno;

b. SELECT ename,ename FROM emp ORDER BY ename;

c. SELECT ename,ename FROM emp ORDER BY 1;

d. SELECT ename,ename FROM emp ORDER BY 2;

e. SELECT ename,ename ORDER BY ename;

30.下面哪一个查询将显示月薪至少为1200美元但是少于2000美元的各个员工的姓名? D

a. SELECT ename FROM emp WHERE sal BETWEEN(1200,2000);

b. SELECT ename FROM emp WHERE sal BETWEEN 1200 and 2000;

c. SELECT ename FROM emp WHERE sal>=1200 AND <2000;

d. SELECT ename FROM emp WHERE sal>=1200 AND sal <2000;

e. SELECT ename FROM emp WHERE sal>1200 AND sal <2000;

31.下面哪一个子句用来限制查询返回的行? C

a. SELECT

b. FROM

c. WHERE

d. ORDER BY

32.下面哪一个运算符用来执行模式搜索? D

a. IN

b. BETWEEN

c. IS NULL

d. LIKE

33.下面哪些查询在结果中不包括部门30中的任何员工?选出所有正确的答案. B

a. SELECT * FROM emp WHERE deptno! =30;

b. SELECT * FROM emp WHERE deptno<>30;

c. SELECT * FROM emp WHERE deptno^30;

d. SELECT * FROM emp WHERE deptno =30;

34.下面哪一个查询将显示没有佣金的所有员工? B

a. SELECT ename FROM emp WHERE comm = NULL;

b. SELECT ename FROM emp WHERE comm IS NULL;

c. SELECT ename FROM emp WHERE comm LIKE NULL;

d. SELECT ename FROM emp WHERE comm LIKE ‘NULL’;

35.下面哪一个查询将返回在销售部或会计部工作并且月薪至少为2000美元的所有员工的姓名?选出所有正确的答案. A B C D

a. SELECT ename FROM emp NATURAL JOIN dept WHERE dname IN(’SALES’,'ACCOUNTING’) AND sal>=2000;

b. SELECT ename FROM emp  JOIN dept ON emp.deptno = dept.deptno WHERE sal >= 2000 AND dname = ‘SALES’ OR dname =’ACCOUNTING’;

c. SELECT ename FROM emp  JOIN dept USING(deptno) WHERE sal >= 2000 AND (dname = ‘SALES’OR dname =‘ACCOUNTING’);

d. SELECT ename FROM emp NATURAL JOIN dept WHERE sal >= 2000 AND (dname = ‘SALES’OR dname =‘ACCOUNTING’);

36.下面哪一个子句用来按照某种顺序显示查询的结果? D

a. SELECT

b. FROM

c. WHERE

d. ORDER BY

37.PL/SQL块中,下面哪一部分是必需的? B

a. 声明

b. 可执行

c. 异常处理

d. 结束

38.下面哪一个参数是过程接受的参数? A

a. INPUT

b. OUT

c. INOUT

d. IN

39.如果在PL/SQL块中使用NUMBER数据类型声明了一个变量,但是在创建时没有初始化它,那么将为这个变量指定什么值? C

a. 0

b. 1

c. NULL

d. 999

40.下面哪一种循环不需要用户执行OPEN命令来打开显式游标? D

a. 基本循环

b. WHILE循环

c. IF循环

d. 游标FOR循环

43.哪一个程序包可以用来显示PL/SQL块中的一个变量的内容? B

a. PUT_LINK

b .DBMS_OUTPUT.put_line

c. SERVEROUTPUT

d. DISPLAY_OUT

44.下面哪一个属性可以用来指定游标处理的行数? A

a. % ROWCOUNT

b. % ISOPEN

c. % FOUND

d. % NOTFOUND

45.下面哪一个属性可以用来为记录指定一行的结构? D

a. % FOUND

b. % TYPE

c. % STRUCTURE

d. % ROWTYPE

46.下面哪些属性可以用来控制循环的执行?选出所有正确的答案. C D

a. % ROWCOUNT

b. % ISOPEN

c. % FOOUND

d. %NOTFOUND

47.下面哪些项目可以用来在PL/SQL块中初始化一个变量?选出所有正确的答案. C

a. DEFAULT

b. =

c. : =

d. <>

50.下面哪一个符号可以用来在Oracle9i中执行一个脚本文件? C

a. %

b. $

c. @

d. !

完成下列操作,写出相应的SQL语句

51. 创建表空间neuspace,数据文件命名为neudata.dbf,存放在d:\data目录下,文件大小为200MB,设为自动增长,增量5MB,文件最大为500MB(8)

答:create tablespace neuspace datafile ‘d:\data\neudata.dbf’ size 200m autoextend on next 5m maxsize 500m;

52. 假设表空间neuspace已用尽500MB空间,现要求增加一个数据文件,存放在e:\appdata目录下,文件名为appneudata,大小为500MB,不自动增长。(5分)

答:alter tablespace neuspace add datafile ‘e:\appdata\appneudata.dbf’ size 500m;

53. 以系统管理员身份登录,创建账号tom,设置tom的默认表空间为neuspace。为tom分配connectresource系统角色,获取基本的系统权限。然后为tom分配对用户scott的表empselect权限和对SAL, MGR属性的update权限。(8)

答:create user tom identified by jack default tablespace neuspace;

Grant connect, resource to tom;

Grant select, update(salary, mgr) on scott.emp to tom;

54. 按如下要求创建表classstudent。(15分)

属性

类型(长度)

默认值

约束

含义

CLASSNO

数值 (2)

主键

班级编号

CNAME

变长字符 (10)

非空

班级名称

属性

类型(长度)

默认值

约束

含义

STUNO

数值 (8)

主键

学号

SNAME

变长字符 (12)

非空

姓名

SEX

字符 (2)

性别

BIRTHDAY

日期

生日

EMAIL

变长字符 (20)

唯一

电子邮件

SCORE

数值 (5, 2)

检查

成绩

CLASSNO

数值 (2)

外键,关联到表CLASSCLASSNO主键

班级编号

答:create table class

(classno number(2) constraint class_classno_pk primary key,

cname varchar2(10) not null);

create table student

(stuno number(8) constraint student_stuno_pk primary key,

sname varchar2(12) not null,

sex char(2) default ‘’,

birthday date,

email varchar2(20) constraint student_email_uk uni

表结构说明

create table myemp(

id number(10) not null,

salary number(10,2) default 0 not null,

name varchar2(24) not null

);

1.创建序列seq_employee该序列每次取的时候它会自动增加1开始计数不设最大值并且一直累加不循环。(10分)

Create sequence seq_employee increment by 1 start with 1 nomaxvalue nocycle



2.写一个PL/SQL块,插入表user.employee100条数据。插入该表中字段id用序列seq_employee实现,薪水和姓名字段可以任意填写。(15分)

declare i number;

begin

for i in 1 .. 100

loop

insert into employee

values(seq_employee.nextval,1950+i,’王明’||to_char(i));

commit;

end loop;

end;

/



6.写一个语句块,在语句块中定义一个显式游标,按id升序排列,打印表employee中前十条数据。(15分)

declare

cursor c is select id,salary,name from(select * from employee order by id) where rownum<11;

v_record c%rowtype;

begin

open c;

loop

fetch c into v_record;

exit when c%notfound;

dbms_output.put_line(to_char(v_record.id)||’,'||to_char(v_record.salary)||’,'||v_record.name);

end loop;

close c;

end;

/

7.创建存储过程p_employee,输入员工薪水范围,返回员工工号、姓名、薪水结果集,结果集按员工薪水升序排列。(15分)

create or replace procedure p_employee

(iminsalary in number,

imaxsalary in number)

is

begin

for x in(select id,salary,name from(select * from employee where salary between iminsalary and imaxsalary) order by salary)

loop

dbms_output.put_line(to_char(x.id)||to_char(x.salary)||x.name);

end loop;

end;

/

8.创建函数f_employee实现更新员工薪水的功能,将薪水低于2000且姓wang的员工薪水加5%,其他不变,更新成功则返回0,否则返回1。(15分)

: create or replace function f_employee

Return number

is

begin

update employee set salary=salary+salary*0.05 where salary<2000 and name like ‘%’;

commit;

if SQL%rowcount=0 then

return 1;

else

return 0;

end if;

end;

/

问答题:

1、写分页有哪些方法,你一般用什么方法?用SQL语句写一个分页?

如何用存储过程写分页?

select * from (select n.*,row_number() over(order by columnname) num from tablename n) where num>=10 and num <=20;

使用过程时,只要将分页的范围用两个参数就可以实现。在ORACLE中,要将过程封装在包里,还要用动态游标变量才能实现数据集的返回。

2、什么时候会用到触发器

: A安全管理、B日志管理、C复杂业务逻辑实现

3、如何在数据库中显示树控制?

: 用父ID与子ID来实现

4、如何实现数据库的优化?

: A、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。

B、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。

C、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。

D、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。

E、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。 SCISC

F、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。

本文来源:https://www.2haoxitong.net/k/doc/30a9fd38580216fc700afd2e.html

《oracle常见面试题及答案.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式