oracle面试必会6题经典_oracle常见面试题

2022-11-02 15:20:55 浏览数 (1)

1.你要对操纵Oracle数据库中的数据。下列哪个选项表示Oracle中select语句的功能,

并且不需要使用子查询(C)

A.可以用select语句改变Oracle中的数据

B.可以用select语句删除Oracle中的数据

C.可以用select语句和另一个表的内容生成一个表

D.可以用select语句对表截断

2. 你要在Oracle中定义SQL查询。下列哪个数据库对象不能直接从select语句中引用(C)

A.表 B.序列 C.索引 D.视图

3. 用下列代码块回答问题:

SQL> select ______(-45) as output from dual;

OUTPUT

——

-45

下列哪个单行函数无法产生这个输出(A)

A.abs() B.ceil() C.floor() D.round()

4. SQL *Plus中发出的下列语句:

SQL> select ceil(-97.342),

2 floor(-97.342),

3 round(-97.342),

4 trunc(-97.342)

5 from dual;

下列哪个函数不返回结果-97(B)

A.ceil() B.floor() C.round() D.trunc()

5. 你要定义外连接,下列哪个选项正确描述了外连接语句?( D )

A.由于外连接操作允许一个表中有NULL值,因此连接这些表时不必指定相等性比较。

B.在表A与B的外连接语句中,如果不管B表有无相应记录,都要显示表A的所有行,则可以使用右外连接。

C.在表A与B的外连接语句中,如果不管A表有无相应记录,都要显示表B的所有行,则可以使用左外连接。

D.尽管外连接操作允许一个表中有NULL值,但连接这些表时仍要指定相等性比较

6. 对数据库运行下列哪个group by查询时会从Oracle产生错误?( C )

A.select deptno, job, sum(sal) from emp group by job, deptno;

B.select sum(sal), deptno, job from emp group by job, deptno;

C.select deptno, job, sum(sal) from emp;

D. select deptno, sum(sal), job from emp group by job, deptno;

7.若account表中有14条记录,则用户执行了以下操作,结果是( A )

declare

cursor mycur is select * from emp;

begin

open mycur;

dbms_output.put_line(mycur%rowcount);

close mycur;

end;

A.0

B.14

C.7

D.编译不通过,无法执行。

8. 数据库系统的核心是__B____。

A、数据模型B、数据库管理系统C、软件工具D、数据库

9. 下列叙述中正确的是___C__。

A、数据库是一个独立的系统,不需要操作系统的支持

B、数据库设计是指设计数据库管理系统

C、数据库技术的根本目标是要解决数据共享的问题

D、数据库系统中,数据的物理结构必须与逻辑结构一致

10. SQL 语句中修改表结构的命令是_C___。

A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE

D、ALTER STRUCTURE

11. 如果要创建一个数据组分组报表,第一个分组表达式是”部门”,第二个分组表达

式是”性别”,第三个分组表达式是”基本工资”,当前索引的索引表达式应当是___B__。

A、部门 性别 基本工资

B、部门 性别 STR(基本工资)

C、STR(基本工资) 性别 部门

D、性别 部门 STR(基本工资)

12. 数据库DB、数据库系统DBS、数据库管理系统DBMS 三者之间的关系是___A___。

A、DBS 包括DB 和DBMS

B、DBMS 包括DB 和DBS

C、DB 包括DBS 和DBMS

D、DBS 就是DB,也就是DBMS

13. 定位第一条记录上的命令是__A____。

A、GO TOP B、GO BOTTOM C、GO 6 D、SKIP

14. 在关系模型中,实现”关系中不允许出现相同的元组”的约束是通过__B____。

A、候选键B、主键C、外键D、超键

15. 只有满足联接条件的记录才包含在查询结果中,这种联接为__C____。

A、左联接

B、右联接

C、内部联接

D、完全联接

16. 索引字段值不唯一,应该选择的索引类型为____B__。

A、主索引

B、普通索引

C、候选索引

D、唯一索引

17. 10. 从数据库中删除表的命令是___A__。

A、DROP TABLE

B、ALTER TABLE

C、DELETE TABLE

D、USE TABLE

18. DELETE FROM S WHERE 年龄>60 语句的功能是___B__。

A、从S 表中彻底删除年龄大于60 岁的记录

B、S 表中年龄大于60 岁的记录被加上删除标记

C、删除S 表

D、删除S 表的年龄列

19. SELECT-SQL 语句是__B___。

A、选择工作区语句

B、数据查询语句

C、选择标准语句

D、数据修改语句

20. SQL 语言是__C___语言。

A、层次数据库

B、网络数据库

C、关系数据库

D、非数据库

21. 在SQL 中,删除视图用__C____。

A、DROP SCHEMA 命令

B、CREATE TABLE 命令

C、DROP VIEW 命令

D、DROP INDEX 命令

22. 在数据库设计器中,建立两个表之间的一对多联系是通过以下索引实现的

__ A____。

A、”一方”表的主索引或候选索引,”多方”表的普通索引

B、”一方”表的主索引,”多方”表的普通索引或候选索引

C、”一方”表的普通索引,”多方”表的主索引或候选索引

D、”一方”表的普通索引,”多方”表的候选索引或普通索引

23. 下列函数中函数值为字符型的是___B___。

A、DATE()

B、TIME()

C、YEAR()

D、DATETIME()

24. 将查询结果放在数组中应使用___A___短语。

A、INTO CURSOR B、TO ARRAY C、INTO TABLE D、INTO ARRAY

简答题

1. 如何判断游标是否到了末尾。

答: cursor_name%notfound

2.写一个‘游标’并使用它。

答:

Declare

cursor cursor_name is

Select real_name from account;

Name varchar2(10);

Begin

open cursor_name;

loop

fetch cursor into name;

exit when cursor_name%notfound;

sql…

end loop;

close cursor_name;

end;

3. 使用存储过程访问数据库比直接用SQL语句访问有哪些优点?

答:

存储过程是预编译过的,执行时勿须编译,执行速度更快;存储过程封装了一批SQL语句,便于维护数据的完整性与一致性;可以实现代码的复用。

4.简述数据库的第一范式,第二范式,第三范式。并举例

答:

第一范式:(1NF)无重复的列。

第二范式:(2NF)属性完全依赖于主键。

第三范式:(3NF)属性不依赖于其它非主属性。

5. 试述事务的概念及事务的四个特性。

答:

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这个四个特性也简称为ACID特性。

原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

持续性:持续性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。

6. Truncate与 delete的区别?

答:

delete一般用于删除少量记录的操作,而且它是要使用回滚段并且要进行显示的提交事务。而truncate则使用于大量删除数据,而且隐式提交事务,其速度要比使用delete快的。

7. Truncate与 delete的区别?

答:

DDL表示数据定义语言,在ORACLE中主要包括CREATE,ALTER,DROP;

DML表示数据操作语言,主要的DML有SELECT,INSERT,UPDATE,DELETE。

8.如何获取系统时间。

答:

select sysdate from dual;

编程题

1、一个日期判断的sql 语句?

请取出tb_send 表中日期(SendTime 字段) 为当天的所有记录?(SendTime 字段为

datetime 型,包含日期与时间)

答:select * from tb where datediff(dd,SendTime,getdate())=0

2.一道SQL 语句面试题,关于group by 表内容:

2005-05-09 胜

2005-05-09 胜

2005-05-09 负

2005-05-09 负

2005-05-10 胜

2005-05-10 负

2005-05-10 负

如果要生成下列结果, 该如何写sql 语句?

胜负

2005-05-09 2 2

2005-05-10 1 2

答:

create table #tmp(rq varchar(10),shengfu nchar(1))

insert into #tmp values(‘2005-05-09′,’胜’)

insert into #tmp values(‘2005-05-09′,’胜’)

insert into #tmp values(‘2005-05-09′,’负’)

insert into #tmp values(‘2005-05-09′,’负’)

insert into #tmp values(‘2005-05-10′,’胜’)

insert into #tmp values(‘2005-05-10′,’负’)

insert into #tmp values(‘2005-05-10′,’负’)

1)select rq, sum(case when shengfu=’胜’ then 1 else 0 end)’胜’,sum(case when shengfu=’负’

then 1 else 0 end)’负’ from #tmp group by rq

2) select N.rq,N.勝,M.負from (

select rq,勝=count(*) from #tmp where shengfu=’胜’group by rq)N inner join

(select rq,負=count(*) from #tmp where shengfu=’负’group by rq)M on N.rq=M.rq

3)select a.col001,a.a1 胜,b.b1 负from

(select col001,count(col001) a1 from temp1 where col002=’胜’ group by col001) a,

(select col001,count(col001) b1 from temp1 where col002=’负’ group by col001) b

where a.col001=b.col001

3、请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1-12 月份的发生额。

AccID:科目代码,Occmonth:发生额月份,DebitOccur:发生额。

数据库名:JcyAudit,数据集:Select * from TestDB

答:select a.*

from TestDB a

,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID=’101′ group

by Occmonth) b

where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

4.有一个两维表,M行N列,请用Oracle的存储过程,转置成N行M列。

答: CREATE OR REPLACE PROCEDURE row_col_convert(p_tabname IN VARCHAR2,view_name IN VARCHAR2 DEFAULT ‘v_tmp’)

AUTHID CURRENT_USER

AS

sqlstr VARCHAR2(4000);

sqlstr1 varchar2(500):=’select ”??” newid’;

cur sys_refcursor;

id_col VARCHAR2(30);

id varchar2(100);

BEGIN

if trim(p_tabname) is null then return; end if;

SELECT column_name INTO id_col FROM user_tab_cols WHERE table_name=upper(p_tabname) AND column_id=1;

OPEN cur FOR ‘select to_char(‘||id_col||’) from ‘||p_tabname||’ order by 1′;

loop

fetch cur INTO ID;

exit WHEN cur%notfound;

sqlstr1:=sqlstr1||’,max(decode(‘||id_col||’,”’||id||”’,to_char(??)))”‘||id||'”‘;

END loop;

sqlstr1:=sqlstr1||’ from ‘||p_tabname;

FOR cur1 IN(SELECT column_name FROM user_tab_cols WHERE table_name=upper(p_tabname) AND column_id>1) loop

sqlstr:=sqlstr||chr(10)||’union all ‘||REPLACE(sqlstr1,’??’,cur1.column_name);

END loop;

execute immediate ‘create or replace view ‘||view_name||’ as ‘||substr(sqlstr,12);

END;

5.请根据以下的描述,编写存储过程 sp_terminal

用户资料表:serv( serv_id number(10), pro_id number(10), user_type varchar2(30), terminal_name varchar2(30) )

其中,serv_id 为用户标识,是serv表的主键,prod_id为产品标识;user_type为用户类型;terminal_name为终端类型

终端类型临时表:terminal(serv_id number(10),terminal_name varchar2(30))

初始化的情况下,serv表的serv_id,prod_id,user_type字段是已知的,terminal_name字段是空的,现在主要根据prod_id,user_type字段的值来更新terminal_name字段

更新条件为:

当条件满足“prod_id = 1 and user_type=’A’“时,terminal_name更新为‘固话’

当条件满足”prod_id = 1 and user_type=’B’“时,terminal_name更新为‘小灵通’

当条件满足”prod_id = 2“时,terminal_name更新为‘宽带’

当条件满足”user_type=‘C’“时,terminal_name更新为‘CDMA’

以上条件均不满足时,terminal_name更新为 -1;

答:

create or replace procedure sp_terminal

is

begin

update serv t

set t.terminal_name = case when t.pro_id = 1 and t.user_type = ‘A’ then ‘固话’

when t.pro_id = 1 and t.user_type = ‘B’ then ‘小灵通’

when t.pro_id = 2 then ‘宽带’

when t.user_type = ‘C’ then ‘CDMA’

else ‘-1’

end;

update terminal a

set a.terminal_name = (select t.terminal_name

from serv t

where t.serv_id = a.serv_id)

where exists (select ‘x’

from serv t

where t.serv_id = a.serv_id);

end;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/180574.html原文链接:https://javaforall.cn

0 人点赞